我使用的是 Rocky 9.4 和 OpenSSH 8.7p1,有一个 RSA 密钥对,但除非sshd 处于调试模式,否则无法使用。(还好我有一对旧的密钥对,还能用)。
我已取消设置 SSH_AUTH_SOCK,并确认没有代理参与。为了避免这种情况,我已移动 ~/.ssh/config 文件。我已确认 ~/.ssh/ 的模式为 0700,id_rsa 和 authorized_keys 的模式为 0400,known_hosts 的模式为 0600。我已确认 authorized_keys 中的公钥正确,并使用“ssh-keygen -l”进行了验证。
当 sshd 作为服务运行时,我运行“ssh -avv -i ~/.ssh/id_rsa localhost”,我看到:
Offering public key: (with the correct filename and SHA256 fingerprint)
we sent a publickey packet, wait for reply
Authentications that can continue: publickey, ...
we did not send a packet, disable method
Next authentication method: keyboard-interactive
...并提示我输入常用密码。
/var/log/secure 显示:
Connection from 127.0.0.1 ...
Failed publickey for (user) and shows the same correct SHA256 code.
我发现建议我停止 sshd 服务,并在调试模式下手动运行。我以 root 身份打开了第二个会话并运行:
systemctl stop sshd
/usr/sbin/sshd -D -ddd -e
当我在原始用户窗口中重复“ssh -avv -i ~/.ssh/id_rsa localhost”命令时,我看到:
Offering public key: (with the correct filename and SHA256 fingerprint)
we sent a publickey packet, wait for reply
Server accepts key: (with the correct filename and SHA256 fingerprint)
Enter passphrase for key '(filename)': (I type passphrase)
Authenticated to 127.0.0.1 (via proxy) using "publickey".
...并且我已使用相同的密钥成功登录。
我希望 sshd -D -ddd 能帮助我解决问题,但它很高兴地接受了我的密钥。
更新时间:2024-04-30
采纳@mircea-vutcovici的建议,设置LogLevel: DEBUG
在sshd
尝试不同的密钥时生成不同的消息序列:失败的尝试包含一条authorized_keys
不可读的消息,尽管所有密钥都在同一个文件和同一个sshd
实例中!
我的 homedir 是一个 NFS 共享,并且 SELinux 正在强制执行,因此我使用@grawity 的建议 做了一些搜索: ls -LZ
producedsystem_u:object_r:nfs_t:s0
是一个通用的 SELinux 标签。显然,如果 NFS 挂载先于 SELinux 策略加载,就会出现问题。patchwork :selinux: make labeled NFS work when mount before policy load。这个问题已于 2023 年修复,应该会添加到 Rocky 9.4(2024 年中)。不过,/home
它还是通过 NFS 挂载的vers=3
,仅供参考。
我最终找到了一个有用的咒语 serverfault:NFS 家庭目录中的 SELinux 标签错误?: setsebool -P use_nfs_home_dirs on
。我现在可以使用这两个密钥,但仍然不明白为什么它们会被区别对待,因为两个公钥都在同一个文件中,并且两个私钥在同一个文件夹中具有相同的权限。
刚碰到一个13年前的类似问题:仅当 sshd 为守护进程时,公钥认证才会失败。显然 SELinux 一直是问题所在 :-) 我要感谢 @grawity 的回答,它让我陷入了困境。