我有一个 CentOS 8 服务器,设置了一些使用 SSH 密钥的用户,并且截至几天前,我在使用任何用户登录时都没有遇到任何问题。 (密码验证被禁用,root 登录也被禁用。)
我今天使用 PuTTY 和 WinSCP 登录并感到不寒而栗:
服务器拒绝我们的密钥
所有用户都会发生这种情况。sshd
似乎很明显地发挥作用,因为它已经达到了拒绝钥匙的地步。当我挖掘日志时,我看到:
服务器提供了这些身份验证方法:publickey、gssapi-keyex、gssapi-with-mic
这表明sshd
似乎运行正常。
我尝试使用Pageant中加载的密钥登录,也尝试绕过Pageant并直接在PuTTY和WinSCP中加载密钥,密钥仍然被拒绝。是的,这是正确的密钥,而且没有改变。
我碰巧运行了一个备份应用程序,因此我能够查看服务器上的文件可能发生了哪些更改。我可以确认这些.ssh/authorized_keys
文件没有被修改。也没有sshd_config
,我下载并查看了它。
我上次登录是几天前,我做了一个dnf update
,但我不知道这会如何影响这一切。
有什么想法可能导致这种情况吗?
答案1
问题是/home
权限。我暗自怀疑,但拒绝考虑这个想法,因为我不明白问题是如何发生的。当我回忆时,我隐约记得setfacl
在ACL
处理目录条目时输错了命令。我不小心做了一个,这搞乱了所需的setfacl -Rn [...] /home
权限。sshd
$home/.ssh/authorized_keys
这意味着所有用户都被锁定。PasswordAuthentication
设置为 时,No
无法进入服务器。那我是怎么解决的呢?感谢 Acronis 备份。我只是sshd_config
从几个月前恢复到它PasswordAuthentication
设置为Yes
并添加reboot
为后命令时。然后,在服务器重新启动后,我使用密码登录,并setfacl -b
在正确的位置删除了 ACL,一切都恢复正常。
有点幸运,但我专门为几种灾难场景配置了备份,其中之一是需要很久以前的文件。
PS:友情建议,请立即仔细检查您的备份策略并投资可靠的解决方案。如果没有企业级备份,我可能会陷入数天的困境,试图将服务器的硬盘驱动器移动到新服务器并恢复我的 Web 应用程序,或者尝试启动到救援模式或其他一些乏味/不确定的方法。