无密码SSH仅在我已经使用SSH登录时才有效

所以我使用以下设置无密码ssh: 如何设置无密码SSH登录?

设置完毕后,我希望我不需要密码来ssh。 我的问题是,在我第一次连接到ssh时,它会询问我输入密码,但除此之外的其他会话也不会要求输入密码。

我已经检查了我的sshd_config以确保它包含:

RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys 

非常确定我的权限是正确的,因为如果他们不是那么无密码ssh根本就不会工作。

为了给这个问题添加更多“乐趣”,我注意到当我重新启动计算机(客户端计算机或ssh服务器计算机)时,有时它会起作用。 然后,当我关闭计算机并在第二天再次尝试时,它不再起作用了。 也许这是完全随机的,但这是我注意到的。

这是加密家庭的常见问题,并且多次回答,例如在Unix上 ,但即使在官方的Ubuntu文档中也有所涉及。

这可能是由于在登录时无法访问您的主目录(以及密钥)这一事实。 这可能是由于您的主页在登录后从网络驱动器(在共享系统上)挂载或您的主目录已加密(通常安装工作站)这一事实。

解决这个问题很复杂,但我会进行一些讨论。 解决方案是将AuthorizedKeysFile移动到其他可以访问的地方,或者我们可以访问全局存储的密钥( /etc/security/authorized_keys ),或某种SSO管理系统(IPA,LDAP),它将从目录中获取您的密钥服务器(是的,可以是本地的)。 取决于您对目标系统的控制程度。

可能最好的解决方案是将密钥存储在其他位置,更改sshd_config的值:

 AuthorizedKeysFile /etc/ssh/%u/authorized_keys 

无论如何,如果您要移动您的authorized_keys ,请确保他们具有适当的权限并依据这样的事实,如果您使用公钥登录,您将无法访问您的主目录(它是由您的密码加密!),除非你改变它的加密方式。

如果证书被正确复制,那么它应该与这样形成的连接一起工作:

 ssh hostname\ip -l username 

其中username是用户,谁拥有.ssh / authorized_keys中的证书