问题描述
我的机器最近停止接受传入的公钥身份验证。我有一个 ubuntu 11.04 桌面,我从 Windows 机器 ssh 进入。我在选美比赛中使用腻子。我可以连接,但只能使用交互式密码身份验证,而不是我设置的 rsa 密钥。
我已经验证该密钥列在 ~/.ssh/authorized_keys 中。我该如何解决这个问题,我该检查什么?
最佳方法
如果公钥验证不起作用:确保在服务器端,您的主目录 ( ~
)、~/.ssh
目录和 ~/.ssh/authorized_keys
文件都只能由其所有者写入。特别是,它们中的任何一个都不能被组写入(即使用户单独在组中)。 chmod 755
或 chmod 700
可以,chmod 770
不行。
出现问题时要检查的内容:
-
运行
ssh -vvv
可以看到很多调试输出。如果您发布一个问题,询问您为什么无法使用 ssh 连接,请包含此输出(您可能希望匿名主机名和用户名)。 -
如果可以,请检查
/var/log/auth.log
中的服务器日志。 -
如果公钥身份验证不起作用,请再次检查权限,尤其是组位(见上文)。
次佳方法
我遇到了同样的事情,最后发现这是因为我加密了我的主目录。 SSH 在您登录之前无法读取 authorized_keys 文件,因此基本上它会强制您先进行密码验证。请参阅以下链接中有关加密主目录的部分:
https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Encrypted_Home_Directory
第三种方法
如果您检查目录的权限,并且在它们之后有一个 “.”,那么您可能启用了 selinux,这将导致密钥交换混乱,并且默认为手动密码识别。
您可以按照此处的说明禁用 SELinux 进行故障排除:http://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html,或者只需编辑 /etc/selinux/config 文件并将其从 “enforcing” 更改为 “disabled”。
希望这可以帮助。
第四种方法
我会确保您在 /etc/ssh/sshd_config 中的设置正确。
要强制仅使用 PKI 并禁止密码,请找到该行
#PasswordAuthentication yes
在您的文件中,取消注释并将其设置为
PasswordAuthenticate no
我还会通读设置的平衡以确保它们有意义。特别是,请尽量确保您使用 RSA 密钥,因为已知 DSA 会受到损害。