我的机器最近停止接受传入的公钥身份验证。我有一个 ubuntu 11.04 桌面,我从 Windows 机器通过 ssh 进入。我使用 putty 和 pageant。我可以连接,但只能使用交互式密码身份验证,而不能使用我设置的 rsa 密钥。
我已经验证了密钥在 ~/.ssh/authorized_keys 中列出。我该如何修复这个问题以及我应该检查什么?
答案1
如果公钥认证不起作用:确保在服务器端,你的主目录(~
)、~/.ssh
目录和~/.ssh/authorized_keys
文件都是可写的只有其主人。特别是,它们中的任何一个都不能由组写入(即使用户在组中是单独的)。chmod 755
或者chmod 700
是 ok,chmod 770
不是。
出现问题时要检查什么:
- 运行
ssh -vvv
后会看到很多调试输出。如果您发布问题询问为什么无法使用 ssh 连接,请包含此输出(您可能希望匿名化主机名和用户名)。 - 如果可以,请检查服务器登录
/var/log/auth.log
。 - 如果公钥认证不起作用,请再次检查权限,尤其是组位(参见上文)。
答案2
我遇到了同样的问题,最后发现这是因为我加密了我的主目录。 SSH 在您登录之前无法读取 authorized_keys 文件,因此基本上它会强制您先进行密码验证。 请参阅以下链接中有关加密主目录的部分:
https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Encrypted_Home_Directory
答案3
如果您检查目录的权限,发现目录后面紧接着一个“。”,那么您可能启用了 selinux,这会干扰密钥交换,并且默认为手动密码识别。
您可以按照此处的说明禁用 SELinux 来排除故障:http://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html,或者只需编辑 /etc/selinux/config 文件并将其从“强制”更改为“禁用”。
希望这可以帮助。
答案4
导致该问题的一个可能原因是您有 DSA 密钥,但现在 SSH(显然)默认需要 RSA 密钥。我在升级到 16.04 时遇到了这个问题。您可以查看更多这里但简短的回答是添加以下内容~/.ssh/config
:
PubkeyAcceptedKeyTypes ssh-dss