2011/08/16

“Server Refused Our Key” 解决办法

PuTTY,这个Windows下非常流行的SSH客户端,真称得上小巧玲珑,用起来非常便手,而且还有许多秘藏的功能,比如密钥登录的ssh-keygen和绕过防火墙的Tunnels,这些超强功能都是最近通过一个PuTTY高级应用的视频才了解到的。

这个帖子单讲ssh-keygen的学习过程和遇到的“Server Refused Our Key” 问题及解决办法。其实,通过密钥登录Linux没什么复杂的,基本设置和操作步骤如下。
  1. 通过Puttygen.exe生成并在本机保存公钥(test.pub)与私钥(test.ppk),密钥文件名随便设,在此过程中还可以根据个人需要为私钥再设一个密码(Key Passphrase)。
  2. 将公钥加入到要登录用户的家目录的相应文件中。通过Puttygen加载并复制先前生成的公钥文件(test.pub),在服务器端用vi修改 .ssh/authorized_keys这个文件,粘贴公钥,并修改文件夹及文件权属(mkdir .ssh-> vi. .ssh/authorized_keys->chmod 755 .ssh->cd .ssh->chmod 644 authorized_keys)。
  3. 运行Pageant.exe,添加私钥文件(test.ppk),如果私钥设置了密码,此时需要输入。事实上,也可以不用这个Pageant,而是通过配置PuTTY,直接添加私钥(Connection->SSH->Auth->Private key file for authentication)。

按照以上步骤走下来,重新运行PuTTY、输入用户名之后,我却得到这么一个提示“Server Refused Our Key”。为此,首先查了sshd_config这个文件(vi /etc/ssh/sshd_config),默认设置没错,允许RSA,允许公钥,公钥存放默认位置也没错。

Google搜了一圈,发现遇到这个问题的还不少,各路高手对问题的分析和解决方案也是林林种种,尝试了几个都没有成功,后来用了这篇文章中提供的方法SSH成功登录之后,我知道他们考虑复杂了。原来症结就在PuTTY生成的Key的格式OpenSSH不接受,换句话说,只要把公钥的格式做2处小修改即可:
  1. 去掉头尾没用的三行(如果你是从Puttygen中复制过来的话,这三行已经被截掉了);
  2. 把断行统统去掉保存为一行。



再试,成功!

---

备注:

回过头来写这篇帖子的时候,才发现遥远的文章中早有提醒,只是没有明说这个OpenSSH密钥格式问题,如下:
要注意的是,一个public key只占一行,如果贴入后出现多行应该想办法修正到一行,ssh-rsa后面有一个空格,key最后的=和注释之间也有一个空格。

No comments: