客户端:opensuse 10.3,openssh 4.6 主机:opensuse 11.3,openssh 5.4
我有一个用户,他已将 ssh 公钥设置到主机,以便通过 cron 运行一些脚本。我们将主机迁移到新服务器,发现用户无法再连接到主机。在客户端上,我删除了 RSA 公钥和私钥以及已知主机,在服务器上,我删除了用户的 authorized_keys 文件。之后,我使用“ssh-keygen -t rsa”生成了新的 ssh RSA 密钥,然后将 id_rsa.pub 复制到服务器上的 authorized_keys。但我仍然无法连接。
为了好玩,我在同一台客户端机器上为自己的用户设置了 ssh RSA 密钥,连接到同一台主机。将 id_rsa.pub 复制到服务器上的 authorized_keys 后,我能够成功登录。
我在客户端计算机上还有另一个用户,他的 ssh 密钥到主机也有效。因此,似乎是这个帐户导致了问题。
主机之间的 sshd 配置文件完全相同。您可以查看配置: http://pastebin.com/YdLm8iWx
‘ssh -vvv’ 的输出位于: http://pastebin.com/WQqurUZm
将 sshd 日志设置为 VERBOSE 后,尝试连接时的输出如下: http://pastebin.com/i0SEtLU6
我多次重新生成密钥,但都无济于事,而且由于我今天为其他两个用户设置了同一主机的密钥,因此我认为这不仅仅是密钥问题。如果是,我不明白为什么,因为我每次都遵循相同的程序。
我现在已使用 loglvel DEBUG 运行 sshd;您可以查看 ssh 公钥尝试的日志: http://pastebin.com/KAcqWHQh从第 22 行开始。
解决方案:原因是服务器上的用户帐户被锁定。我最初忽略了这个问题,因为旧服务器上的用户帐户也被锁定了,但 ssh 仍然正常运行。
我发现这个问题的部分原因是在 sshd 配置文件中设置了“不使用 PAM”,重新启动 sshd 并尝试再次 ssh 登录。其中一个日志条目是“帐户已锁定”的消息。解锁帐户后,我能够使用公钥通过 ssh 成功连接。
谢谢
答案1
检查 authorized_keys 文件的权限。它应该属于拥有该帐户的用户,但更重要的是,您不应该能够从其他用户帐户读取或写入它:
$ chown user:group ~user/.ssh/authorized_keys
$ chmod 600 ~user/.ssh/authorized_keys
答案2
尽管我编辑了原始问题以反映解决方案,但只是给出一个“正确”的答案......但还是这样。
解决方案:原因是服务器上的用户帐户被锁定。我最初忽略了这个问题,因为旧服务器上的用户帐户也被锁定了,但 ssh 仍然正常运行。
我发现这个问题的部分原因是在 sshd 配置文件中设置了“不使用 PAM”,重新启动 sshd 并尝试再次 ssh 登录。其中一个日志条目是“帐户已锁定”的消息。解锁帐户后,我能够使用公钥通过 ssh 成功连接。