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

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

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

相关内容