在我将 SSH 公钥复制到 authorized_keys 后,服务器一直要求输入密码

Lui*_*lin 54 ssh

我有一个 Ubuntu 服务器,在云中运行。我创建了一个用户 ( git)。在文件夹中/home/git,我创建了.ssh/目录和authorized_keys文件。

但是,当我将 SSH 公钥放入authorized_keys文件时,服务器继续询问我密码。

我做错了什么?

小智 50

在服务器端,ssh 守护进程会在 中记录错误/var/log/auth.log,因此请检查该文件以查看报告的内容。

从客户端,建立连接时,您可以添加-v标志(或-vv-vvv)以增加详细程度。您或许可以通过这种方式确定您的问题。

以下是其他需要检查的事项。

  • 确保/home/git/.ssh/authorized_keysgit.
  • 确保/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 文件!)


toh*_*ohu 5

有不同的方法可以解决这个问题:您可以配置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)。

  • 默认情况下,Debian/Ubuntu 系统上的所有 SSH 客户端配置(`/etc/ssh/ssh_config`)已经 *prefer* `PubkeyAuthentication` 并首先尝试,因为您将在详细模式下调用 `ssh` 时看到。 (2认同)