为什么使用authorized_keys 不能通过ssh 自动登录?

Mag*_*nar 13 security ssh login

我创建了一个私有/公共 dsa-keypair。我已经把服务器上的公钥放在

~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

一切都像我的其他服务器一样设置,但似乎服务器只是无视我的努力。

Mag*_*nar 35

如果所有者属性错误,服务器将忽略您的 authorized_keys 文件。将其更改为此可修复它:

chmod 0700 ~/.ssh
chmod 0600 ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

  • ssh -vvv -l username server.domain 会告诉你你是否发送了一个有效的密钥 (6认同)

sam*_*amt 16

虽然您的问题可能已经被其他答案解决了,但我已经将自己锁定在足够多的机器之外,无法在注销之前验证 sshd_config 更改,因此提出了以下可能对未来调试 sshd 配置更改有用的过程:

在测试验证行为符合您的预期之前,请勿断开活动的 ssh 连接。

一种。验证您认为 sshd 应该做什么

湾 使用“-t”验证配置是否有效

C。启动您可以实时监控的服务器的详细“测试”版本

d. 启动一个详细的“测试”客户端连接,您可以实时监控


一种。验证您认为 sshd 应该做什么

查看没有所有注释的 sshd 配置文件,如下所示(假设 sshd_config 是正确的文件,并且在 /etc/ssh 中)

$ grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"

这只是清除问题,因此我们可以验证我们认为我们正在更改的内容(不一定正确与否。)

湾 使用“-t”验证配置是否有效

从我正在使用的 sshd 的手册页,

-t 测试模式。只检查配置文件的有效性和密钥的完整性。这对于可靠地更新 sshd 很有用,因为配置选项可能会改变。

其他变化可能有更微妙的情况。例如,在您确定公钥身份验证正常工作之前,不要禁用密码身份验证。

C。启动您可以实时监控的服务器的详细“测试”版本

$ 须藤/usr/sbin/sshd -ddd -p 9999

这会使您现有的工作会话保持活动状态,但会为您提供另一个 sshd 实例来验证您的新配置更改。SSHD 现在在前台运行到用户定义的端口(在我们的示例中为 9999。)并推送大量嘈杂的调试信息,您可以在 /var/log/authlog(或可能 /var/log/auth.log 中跟踪)在您的操作系统上。)

d. 启动一个详细的“测试”客户端连接,您可以实时监控

以详细模式运行 ssh 客户端连接以在屏幕上显示更多信息,这些信息可能会引导您更好地调试错误。

$ ssh -vvv -p 9999 服务器名称

您现在应该在服务器的日志文件或客户端的连接屏幕中有足够的信息来隔离您的问题。

解决方案通常归结为文件权限(如 Magnar 和 setatakahashi 所示)

祝你好运


set*_*shi 13

$ chmod 700 ~

$ chmod 700 ~/.ssh

$ chmod 600 ~/.ssh/authorized_keys

检查 /etc/ssh/sshd_config 中的这些属性

$ sudo grep PubkeyAuthentication /etc/ssh/sshd_config

$ sudo grep 协议 /etc/ssh/sshd_config

  • 属性值*是*应该是什么? (3认同)
  • 关于 ~ 的好点,你必须确保除了你自己以外的任何人都不能写入你的主目录,否则他们可能会重命名你的 ~/.ssh 目录 (2认同)