我有一个在云中运行的 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