我在使用 ssh 时遇到了一个有趣的问题。以下是设置。
我的客户端(运行 Ubuntu 17.04)有公钥和私钥。我使用命令将公钥复制到服务器(运行 Ubuntu Server 16.04.3 LTS)ssh-copy-id
。我通过查看服务器上的 authorized_keys 文件验证了这一点;我的客户端的公钥是唯一列出的。
现在来看看问题。我可以使用我的私人 ssh 密钥从客户端通过 ssh 登录到服务器。但在我注销并再次尝试 ssh 后,我收到以下错误:
Permission denied (publickey).
当我在控制台上登录服务器时,我使用密码登录,一切正常。然后,当我再次尝试从客户端使用 SSH 时,它又可以正常工作了。我可以根据需要多次注销和登录。一旦我从服务器上的控制台注销(就像我之前在服务器上登录一样),我就可以从客户端再使用 SSH 一次。然后,一旦该会话结束,我Permission denied (publickey).
在所有后续 SSH 尝试中都会再次收到错误。有什么想法吗?
以下是我的客户端上的 ssh 配置文件:
Host sauron
HostName 192.168.1.191
User joe
PubKeyAuthentication yes
IdentityFile id_rsa
还有一件事要提一下,我确实对服务器上的整个 SSD 进行了加密。每当我使用加密密码启动服务器时,我都必须将其解锁。不确定这是否相关。我怀疑这可能是权限问题,尽管我也不确定。非常感谢您提出建议,如果您需要澄清任何事情,请询问。
答案1
感谢@muru 关于加密主目录的评论,我被引导到这个文章关于如何处理这个问题。
该文章的 TLDR; 如下,并解决了我的问题:
/etc/ssh/
创建一个与您使用的登录用户同名的目录。在我的例子中:/etc/ssh/joe
。将文件复制
authorized_keys
到此目录。为用户设置该文件和目录的正确权限。
将以下行添加到 sshd_config 文件:
AuthorizedKeysFile /etc/ssh/%u/authorized_keys
- 重新启动 SSH。
全部修复!