喜欢用SSH的兄弟们都知道,SSH不但支持传统远程登陆中的,基于帐户/密码方式的认证,还基于SSH密钥的认证方式。就好比现在有些笔记本电脑支持用密码开机,有些笔记本还支持用指纹开机。

用SSH密钥登陆,服务器自然会要求用户提供公钥。这里再普及一下相关的支持吧!

SSH密钥包括两部分——私钥和公钥,两者组成一对密钥(通常我们也将私钥成为密钥)。公钥是根据私钥计算而来的。这一对密钥由用户在客户端生成(在Linux中,你可以通过ssh-keygen生成一对密钥。在Windows中,可以通过putty自带的puttygen.exe生成)。然后用户将这对密钥的公钥部分给服务器,服务器将公钥加到相应用户的认证密钥文件中(通常是对应的服务器用户~/.ssh/authorized_keys)。

对于很多用putty的用户(尤其Windows用户,貌似putty是非常有知名度的)而言,可能常常会出现自己生成的公钥发给服务器后,无法使用。SSH登陆的时候老拒绝这个key。纠结了很久,发现其实问题很简单,也很无语:

  • 换行符,puttygen生成的公钥会自动换行,而且换行符很有Windows特色,而在服务器中加入到认证的时候需要把他们合成一行。

  • ssh-rsa前缀,puttygen生成的公钥是没有这个前缀的,这是由于puttygen本身支持的加密算法就是这个。但是openssh可不只这一种,所以我们有必要告诉openssh这个——直接在公钥key代码前加上“ssh-rsa ”即可,切记这里有个空格。