我的服务器上的密钥配对登录已经“运行”了一段时间,但是其中一个服务器一直存在问题,最终到了干扰某些任务的地步。
情况:
Host 是我的 PC,我用它来 ssh 连接服务器。Server1 是第一个设置的,并且有一个有效的 ssh 公钥身份验证设置。Server2 是在 Server1 之后设置的,并且从一开始就存在登录问题。这三台计算机都使用相同的用户名。这三台计算机都有加密的主目录。
问题:
当您尝试从主机通过 SSH 进入 Server2 时,在主机重新启动后,系统将提示您输入密码,如果您输入密码并继续,只要主机不重新启动,您就能够顺利通过 SSH 连接。每次重新启动后,您都需要重新输入密码。
有时,如果您使用标签进行 ssh,则可以避免这种情况-vvv
。在这种情况下,您第一次登录时不需要输入密码,但所有后续 SSH 尝试都需要密码。
测试:
我一直在使用:ssh -o PreferredAuthentications=publickey Server2
仅使用公钥访问测试主机和服务器 2 之间的连接。我将使用这些测试的结果而不是-vvv
输出测试,因为它更短。我比较了-vvv
sshing 到服务器 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)
- 重启主机后
- 主机终端崩溃后
- 建立
-vvv
ssh 连接后 - 重新启动 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 模块应该会向您询问密码。