![我将 SSH 公钥复制到 authorized_keys 后,服务器仍要求输入密码](https://linux22.com/image/815413/%E6%88%91%E5%B0%86%20SSH%20%E5%85%AC%E9%92%A5%E5%A4%8D%E5%88%B6%E5%88%B0%20authorized_keys%20%E5%90%8E%EF%BC%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%8D%E8%A6%81%E6%B1%82%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81.png)
我有一个在云中运行的 Ubuntu 服务器。我创建了一个用户 ( git
)。在文件夹中/home/git
,我创建了.ssh/
目录和authorized_keys
文件。
但是,当我将我的 SSH 公钥放入authorized_keys
文件中时,服务器仍继续询问我密码。
我做错了什么?
答案1
在服务器端,ssh 守护程序将在中记录错误/var/log/auth.log
,因此请检查该文件以查看报告的内容。
从客户端,在建立连接时,您可以添加标志-v
(或-vv
或-vvv
)以增加详细程度。您可能能够通过这种方式识别您的问题。
还有其他需要检查的事项。
- 确保 归
/home/git/.ssh/authorized_keys
拥有git
。 - 确保
/home/git/.ssh/authorized_keys
模式为 600 (-rw-------
)。
另请检查/etc/ssh/sshd_config
文件。
PubkeyAuthentication
应设置为yes
- 还有一条
AuthorizedKeysFile
指令用于确定授权密钥应位于的路径。确保它已被注释掉或处于默认值%h/.ssh/authorized_keys
。
答案2
还要确保您的用户主目录(在您的情况下为 /home/git)只有您可以写入。我曾经遇到过这个问题,因为我的主目录是组可写的。/var/log/auth.log 中说:“身份验证被拒绝:目录 /home/chuck 的所有权或模式错误”。 (这是为了确保它不使用除您之外的其他人一直在乱用的 authorized_keys 文件!)
答案3
解决这个问题的方法有很多种:你可以配置sshd
(服务器端)或ssh
(客户端)不使用密码验证。禁用服务器上的密码验证会使你的服务器更安全,但如果你丢失了密钥,你就会遇到麻烦。
为了使ssh
(客户端)使用公钥认证,请在ssh
命令中添加一些选项:
ssh -o PubkeyAuthentication=yes -o PasswordAuthentication=no -X git@server
如果有效,您可以PasswordAuthentication=no
在 ssh 客户端配置文件中永久设置/etc/ssh/ssh_config
系统范围或~/.ssh/config
用户特定的选项(有关详细信息,请参阅man ssh_config
)。
答案4
如果您有多个私钥,请在 ssh 连接命令中使用 -v 开关检查是否正在使用其他主密钥尝试连接。如果没有,请使用以下命令告诉 ssh 客户端使用它们:
ssh-add path/to/private/key