我一直试图在我的电脑和装有 Ubuntu 的 Raspberry Pi 4B 之间建立 SSH 连接,结果却
Permission denied (publickey)
仅当我使用创建客户端的公钥ssh-keygen
并手动将其输入到服务器的/home/ubuntu/.ssh/authorized_keys
文件中时,我才能成功连接:
在尝试连接之前我做的唯一准备就是检查是否sshd
正在运行并设置防火墙:
sudo systemctl status sshd
sudo ufw allow ssh
另外,我也在另一台服务器上尝试了同样的操作,该服务器也是由 Ubuntu 运行的,尽管是 WSL,结果是一样的。
那么我可能做错了什么?
这是正常结果。它从来不会这样。
如果仅
publickey
启用身份验证,让服务器自动将客户端密钥添加到其系统authorized_keys
将完全违背系统的初衷——这意味着任何客户端都可以提供任何密钥并能够使用它登录。(此外,如果您在这次尝试之后只使用 ssh-keygen 创建了一个密钥,那么这意味着您甚至没有服务器会添加的密钥。)
您可能会对客户端
authorized_keys
感到困惑,客户端会“自动”添加服务器的密钥(尽管它不是全自动的:客户端会要求您批准它添加的每个服务器密钥,而这不是服务器可以使用客户端密钥执行的操作。)known_hosts
因此,如果您希望使用密钥连接和登录,则始终需要手动添加它(通过输入,或临时启用 SSH密码验证,或以其他方式传输)。
同时,如果您希望使用密码登录,那么问题根本不出在密钥上;密码验证不使用密钥,而是在服务器中完全被禁用
sshd_config
。