我有一个系统,SSH-ing 仍然要求输入密码,即使:
- 我的公钥正确地存在于
authorized_keys
远程服务器上的文件中。 - 我的私钥存储
id_rsa
在我的.ssh
目录中。 - 本地客户端和远程服务器的权限正确。这包括主目录、
.ssh
目录、authorized_keys
文件和密钥文件本身。 - SELinux 在客户端和服务器上均被禁用。
此外,/var/log/secure
服务器在每次登录尝试时都会报告以下错误:
sshd[17110]: error: Could not get shadow information for <USER>
我用字符串替换了实际的用户名<USER>
。
造成这种情况的原因是什么和/或如何让我的 SSH 密钥正常工作?
答案1
问题是公钥/私钥不匹配在客户端系统上。我通过运行解决了这个问题:
$ cd ~/.ssh
$ ssh-keygen -y -f id_rsa > id_rsa.pub
这将生成与现有私钥对应的公钥并将其写入文件id_rsa.pub
,从而再次匹配公钥/私钥。
我在我找到的几个 Stack Exchange 答案中找不到问题的答案,因此决定在这里提出/回答我自己的问题。这怎么发生的?发生的情况是,我过去有 SSH 密钥,但在某个时候不小心ssh-keygen
又运行了。这创建了一对新的公钥/私钥。我意识到了这一点,并尝试通过放回我的旧私钥来修复它。由于服务器的文件中仍然保留着旧的公钥authorized_keys
,因此无需进行任何更改。不幸的是,我没有更改客户端的公钥导致了目前的情况。