AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1179705
Accepted
ljcorsa
ljcorsa
Asked: 2025-04-24 05:50:29 +0800 CST2025-04-24 05:50:29 +0800 CST 2025-04-24 05:50:29 +0800 CST

SSH 密钥对仅在调试模式下被 sshd 接受

  • 772

我使用的是 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 -LZproducedsystem_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 的回答,它让我陷入了困境。

ssh
  • 2 2 个回答
  • 1315 Views

2 个回答

  • Voted
  1. Best Answer
    grawity
    2025-04-24T18:26:43+08:002025-04-24T18:26:43+08:00

    我的猜测是,您启用了 SELinux,并且authorized_keys文件的标签错误,因此它可以被从交互式用户会话中启动的“sshd”读取,但不能被从“init”启动的“sshd”读取,因为它们在不同的 SELinux 上下文中运行。

    也就是说,手动启动 sshd 不仅会影响“调试模式” ,还会-d影响其他功能。(为了尽量减少差异,应该通过 sshd_config 启用调试模式,就像 Mircea Vutcovici 的帖子中提到的那样。)

    使用检查文件ls -lZ,然后运行restorecon -v它(我认为这是修复它的正确方法?),然后ls -lZ再次运行它。

    • 12
  2. Mircea Vutcovici
    2025-04-24T08:14:25+08:002025-04-24T08:14:25+08:00

    确保~/.ssh/authorized_keys远程用户的文件中包含你的公钥。每行应包含一个公钥。

    编辑/etc/ssh/sshd_config文件,然后更改以下行:

    #LogLevel INFO
    

    类似于:

    LogLevel DEBUG
    

    可能的值有:QUIET、、、、、、、、和 。​​FATALERRORINFOVERBOSEDEBUGDEBUG1DEBUG2DEBUG3

    然后重启sshd服务:

    systemctl status sshd.service
    systemctl restart sshd.service
    systemctl status sshd.service
    

    如果您需要更多详细信息,您可以sshd在以守护进程形式运行时进行 strace 操作:

    sudo strace -s300 -fyyTttp $(pgrep -f 'sshd -D') -o strace-sshd-$HOSTNAME-$(date +%F_%H%M%S).txt`
    

    这将在本地文件夹中生成一个跟踪文件。检查跟踪文件中发生了什么。

    • 10

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve