密钥配对的 SSH 连接在初始连接时需要输入密码

密钥配对的 SSH 连接在初始连接时需要输入密码

我的服务器上的密钥配对登录已经“运行”了一段时间,但是其中一个服务器一直存在问题,最终到了干扰某些任务的地步。

情况:

Host 是我的 PC,我用它来 ssh 连接服务器。Server1 是第一个设置的,并且有一个有效的 ssh 公钥身份验证设置。Server2 是在 Server1 之后设置的,并且从一开始就存在登录问题。这三台计算机都使用相同的用户名。这三台计算机都有加密的主目录。

问题:

当您尝试从主机通过 SSH 进入 Server2 时,在主机重新启动后,系统将提示您输入密码,如果您输入密码并继续,只要主机不重新启动,您就能够顺利通过 SSH 连接。每次重新启动后,您都需要重新输入密码。

有时,如果您使用标签进行 ssh,则可以避免这种情况-vvv。在这种情况下,您第一次登录时不需要输入密码,但所有后续 SSH 尝试都需要密码。

测试:

我一直在使用:ssh -o PreferredAuthentications=publickey Server2仅使用公钥访问测试主机和服务器 2 之间的连接。我将使用这些测试的结果而不是-vvv输出测试,因为它更短。我比较了-vvvsshing 到服务器 2 和正常运行的服务器 1 的输出,唯一明显的差异区域在以下区域:

对于服务器1:

debug1: Offering RSA public key: /home/USER/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279

对于服务器2:

debug1: Offering RSA public key: /home/USER/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password

Host 的~/.ssh/id_rsa.pub内容与 Server2 的~/.ssh/authorized_keys文件匹配。

Server1 和 Server2 之间的 ssh_config 和 sshd_config 文件相同。

Server2上~/.ssh的内容和权限:

total 56
drwx------ 2 USER USER 4096 Jul  1 17:59 .
drwx------ 6 USER USER 4096 Jun 30 11:50 ..
-rw------- 1 USER USER  391 Apr 28 17:31 authorized_keys
-rw------- 1 USER USER 1679 Jun 30 14:51 id_rsa
-rw-r--r-- 1 USER USER  394 Jun 30 14:51 id_rsa.pub
-rw-r--r-- 1 USER USER  442 Jun 30 10:32 known_hosts

最后三个文件的存在是因为该服务器需要能够 ssh 到另一台服务器。

Server2上/usr/sbin/sshd -d的结果为:

debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g  1 Mar 2016
debug1: key_load_private: Permission denied
Could not load host key: /etc/ssh/ssh_host_rsa_key
debug1: key_load_private: Permission denied
Could not load host key: /etc/ssh/ssh_host_dsa_key
debug1: key_load_private: Permission denied
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
debug1: key_load_private: Permission denied
Could not load host key: /etc/ssh/ssh_host_ed25519_key
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
debug1: Set /proc/self/oom_score_adj from 0 to -1000
debug1: Bind to port 22 on 0.0.0.0.
Bind to port 22 on 0.0.0.0 failed: Permission denied.
debug1: Bind to port 22 on ::.
Bind to port 22 on :: failed: Permission denied.
Cannot bind any address.

这与 Server1 的输出相同。

所用测试结果ssh -o PreferredAuthentications=publickey Server2如下:

登录失败:Permission denied (publickey,password)

  • 重启主机后
  • 主机终端崩溃后
  • 建立-vvvssh 连接后
  • 重新启动 ssh 服务后(仅有时有效)

实现成功登录的唯一可能方法是先通过密码进行验证。

解决尝试:

加密主目录解决方法。失败。 用户无需提供密码即可通过 ssh 登陆,但是会话要求主目录未加密(Server1 不需要),并且.profile相关文件未得到正确使用。

我如何允许此服务器接受密钥配对的 ssh 会话?就 ssh 服务而言,它的设置应与 Server1 相同。我已经查看日志和输出一段时间了,所以也许一双新的眼睛可以发现我遗漏的东西。

编辑:现在,重新启动机器后第一次登录成功,但后续登录尝试需要密码。如果在第二次尝试时提供了密码,则所有后续尝试都将成功。

答案1

由于您的主目录已加密,您应该从 Server2 修改 sshd_config,如下所示:

AuthorizedKeysFile    /etc/ssh/%u/authorized_keys

并将你的 authorized_keys 文件放在 /etc/ssh/USERNAME/ 下

当您希望这仅对特殊用户有效时,您可以将其与 Match 结合起来,如下所示:

Match User myuser
  AuthorizedKeysFile    /etc/ssh/my_authorized_keys

剩下一点需要注意:没有密码,您的主目录将无法解密。希望这能有所帮助 ;-) 但您的 pam 模块应该会向您询问密码。

相关内容