walle-web 由于ssh安全升级带来的连接远程服务器失败

运维 · best · 于 3个月前 发布 · 329 次阅读

症状

项目配置好以后点击检测,显示

远程目标机器免密码登录失败
原因:

远程目标机器:192.168.1.100 错误:Authentication failed.
解决建议:

在宿主机中配置免密码登录,把宿主机用户walle的~/.ssh/id_rsa.pub添加到远程目标机器用户192.168.1.100的~/.ssh/authorized_keys。了解更多:http://walle-web.io/docs/troubleshooting.html

辩证

登录目标服务器,查看实时日志。

sudo journalctl -u sshd -f

返回拒绝的原因

userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

定位

执行 ssh -V检查目标服务器ssh版本。

  • 发起服务器:OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
  • 目标服务器: OpenSSH_10.0p2, OpenSSL 1.1.1c 28 May 2019

这个错误的核心原因是:您要连接的服务器上安装了较新版本的 OpenSSH(通常 >= 8.7 或 8.8)。

OpenSSH 社区已正式弃用 ssh-rsa算法,主要原因是其依赖的 SHA-1 哈希算法存在严重的安全漏洞。自 OpenSSH 8.2 版本起,官方开始警告其风险,并在其后的版本(如 8.8 及更新版本)中默认禁用了该算法。

验证当前支持的算法

查看服务器支持的公钥算法:

ssh -Q key

查看服务器 sshd 实际运行时的默认值:

sudo sshd -T | grep pubkeyacceptedalgorithms

结论先行(请认真看)

不是 walle2 整体坏了 不是你的 SSH key 本身坏了 是 Rocky Linux 9.7 的 SSH 安全策略 + 老版 walle2(Paramiko / Python 2.7)不兼容

所以才会出现你说的现象:

✅ 其他项目(旧系统 / CentOS 7 / Ubuntu 老版本)都能发布 ❌ 只有 Rocky Linux 9.7 这个不行 ❌ 手动 ssh 可以,walle2 不行

这是典型的“新系统打老客户端”问题


为什么 Rocky 9.7 会「只拒绝 walle2」?

Rocky Linux 9(和 RHEL 9 一样)做了 3 件事:

① 默认 禁用 SHA-1 的 RSA

Rocky 9 默认 sshd

  • ❌ 不再接受 ssh-rsa(SHA1)
  • ✅ 只接受 rsa-sha2-256 / rsa-sha2-512

而你手动 ssh 成功的证据是

Server accepts key: pkalg rsa-sha2-512

👉 OpenSSH 客户端支持 👉 Paramiko 老版本不完全支持


② 更严格的 crypto policy(系统级)

Rocky 9 用的是:

crypto-policies = DEFAULT

它会系统级别限制

  • key type
  • signature algorithm
  • KEX

Paramiko(尤其 Python 2.7 时代的)经常直接被挡掉


③ walle2 用的是「老技术栈」

你这里的路径已经说明一切了:

python2.7
fabric2
paramiko

这套组合在 2026 年 + Rocky 9 环境下,本身就是高风险不兼容


所以:为什么“别的项目可以,这个不行”?

因为:

服务器sshd 安全级别结果
CentOS 7 / Ubuntu 18宽松✅ walle2 OK
Rocky Linux 9.7严格❌ Paramiko 被拒

👉 不是你配错了,是时代变了

解决办法

‼️确定配置文件

yum 安装和 手工编译安装路径不一样,配置文件也不一样,甚至测试方法也有区别。

以手工编译为例,通常位置/usr/local/openssh/etc/sshd_config

验证配置语法:

# 指定配置文件路径测试(关键!)
sudo /usr/local/openssh/sbin/sshd -t -f /usr/local/openssh/etc/sshd_config

处理目标服务器

临时方案:在服务器端重新启用 ssh-rsa(不推荐)

编辑服务器配置:在 /etc/ssh/sshd_config文件中添加或修改以下行:

PubkeyAcceptedAlgorithms +ssh-rsa

重启 SSH 服务:

sudo systemctl restart sshd

⚠️ 这个方案有很多资料在提,但是我没有实验成功,不较劲了。

首选方案:升级到更安全的密钥算法

最根本的解决方法是生成并使用更现代的密钥对,例如 ed25519或 ecdsa。这是目前最被鼓励的做法,能从根本上提升安全性 。 生成新密钥(例如,使用 ed25519算法):

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
# 不要设置密码

部署新公钥:将新生成的公钥(默认位于 ~/.ssh/id_ed25519.pub)添加到服务器的 ~/.ssh/authorized_keys文件中。

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@your_server_ip

⚠️ 删除旧密钥:在确认新密钥可以正常登录后,建议从服务器的 authorized_keys文件中移除旧的 ssh-rsa公钥。

本文由 best 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册