我有一个 Ubuntu 服务器,在云中运行。我创建了一个用户 ( git
)。在文件夹中/home/git
,我创建了.ssh/
目录和authorized_keys
文件。
但是,当我将 SSH 公钥放入authorized_keys
文件时,服务器继续询问我密码。
我做错了什么?
小智 50
在服务器端,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
.小智 20
还要确保您的用户主目录(在您的情况下,/home/git)只能由您写入。我曾经遇到过这个问题,因为我的主目录是组可写的。/var/log/auth.log 在其中说:“身份验证被拒绝:目录 /home/chuck 的所有权或模式不正确”。(这是为了确保它不使用您以外的其他人一直在使用的authorized_keys 文件!)
有不同的方法可以解决这个问题:您可以配置sshd
(服务器端)或ssh
(客户端)不使用密码身份验证。在服务器上禁用密码验证可以使您的服务器更安全,但如果您丢失了密钥,就会遇到麻烦。
要ssh
使用公钥身份验证进行(客户端),请向ssh
命令添加一些选项:
ssh -o PubkeyAuthentication=yes -o PasswordAuthentication=no -X git@server
Run Code Online (Sandbox Code Playgroud)
如果可行,您可以PasswordAuthentication=no
在/etc/ssh/ssh_config
系统范围内或~/.ssh/config
特定于用户的 ssh 客户端配置文件中永久设置该选项(有关详细信息,请参阅 参考资料man ssh_config
)。