iStoreOS 升级后 Xshell4 无法 SSH 连接:提示「找不到匹配的 key exchange 算法」的解决方案(保留 22,新增 2222 兼容老客户端)

背景与需求

我有一台 iStoreOS / OpenWrt 软路由(旁路由),系统升级到:

  • LuCI:istoreos-24.10 branch
  • iStoreOS:24.10.5 (2025123110)

升级后出现问题:Xshell4 无法连接 SSH,弹窗报错:

找不到匹配的 key exchange 算法(Key Exchange)

我的需求很明确:

  1. 必须继续使用 Xshell4(老客户端,不能升级)
  2. 不要动原来的 22 端口(给新客户端或现有脚本/习惯用)
  3. 最好通过 iStoreOS 的 Web 后台可操作(含防火墙规则)

最终我采用的方案是:
保留 dropbear(22) 不变,另外安装并启用 OpenSSH(2222),专门开启兼容 Xshell4 的老算法。


原因说明:为什么升级后突然连不上?

iStoreOS/OpenWrt 默认 SSH 服务通常是 dropbear。系统升级后,服务端可能只允许更现代、更安全的加密套件(KEX / HostKey / MAC / Cipher)。

Xshell4 太旧,常常只支持或优先使用一些老算法(比如 diffie-hellman-group1-sha1ssh-rsa 等)。当服务端禁用这些老算法时,就会出现:

  • Key exchange algorithm mismatch
  • 找不到匹配的 key exchange 算法

并且:dropbear 在很多版本里无法仅靠配置把这些老算法完整加回来(不少是编译裁剪、能力有限),所以更稳定的做法是用 OpenSSH 单独开一个“兼容端口”。


最终解决方案

  • 继续保留原来的 22 端口(dropbear):给现代 SSH 客户端使用
  • 新增一个兼容老客户端的 2222 端口(OpenSSH sshd)
  • sshd_config 里开启 Xshell4 所需的老算法
  • 防火墙只允许内网访问 2222(强烈建议)

操作步骤(OpenWrt / iStoreOS)

前提:你能进入 iStoreOS Web 后台的终端(ttyd/Web Terminal),或临时用别的 SSH 客户端连进去一次执行命令。

1)安装 OpenSSH Server 并生成主机密钥

opkg update
opkg install openssh-server
ssh-keygen -A

2)配置 OpenSSH 监听 2222,并开启 Xshell4 兼容算法

编辑配置文件:

vi /etc/ssh/sshd_config

在文件末尾追加(或按需合并进现有配置):

Port 2222
ListenAddress 0.0.0.0

# ......... Xshell4 兼容(老算法)
KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

Ciphers +aes128-cbc,aes256-cbc,3des-cbc
MACs +hmac-sha1,hmac-md5

# 允许 root + 密码登录(OpenWrt 场景常用)
PermitRootLogin yes
PasswordAuthentication yes
UsePAM no

说明:

  • KexAlgorithms / ssh-rsa / hmac-sha1 等属于“兼容模式”,安全性较低,但能让 Xshell4 工作。
  • 仅建议 内网使用,不要暴露在公网。

3)启动 sshd 并设置开机自启

/etc/init.d/sshd enable
/etc/init.d/sshd restart

检查 2222 是否监听成功:

netstat -lntp | grep ':2222'

看到 LISTEN ... :2222 ... sshd 即成功。

4)用 Web 图形界面添加防火墙规则(放行 LAN → 本机 2222)

进入:

网络 → 防火墙 → 通信规则 → 添加

填写关键字段:

  • 名称:Allow-SSH-legacy-2222
  • 协议:TCP
  • 源区域:lan
  • 源地址:留空(或填你电脑 IP 更安全)
  • 目标区域:此设备 / Device / input
  • 目标端口:2222
  • 动作:接受(ACCEPT)
  • 启用:勾选

保存并应用。

✅ 注意:
目标区域一定要选 “此设备 / input”,不要选 lan。
这个规则是“允许访问路由器本机服务”,不是端口转发。

5)Xshell4 连接参数

  • 主机:你的 iStoreOS IP,例如 192.168.50.2
  • 端口:2222
  • 用户:root
  • 密码:原 root 密码(如有问题可执行 passwd root 重设)

验证结果

配置完成后,Xshell4 连接成功,进入系统 shell,看到类似:

BusyBox v1.36.1 ... built-in shell (ash)
Powered by OpenWRT
iStoreOS 24.10.5 ...
root@iStoreOS:~#

安全建议(非常重要)

为了兼容 Xshell4,我在 2222 上开启了较弱的算法组合。请务必做到至少一条:

  1. 只允许内网访问 2222(不要从 WAN 放行)
  2. 最好在防火墙规则里限制 源地址=你的电脑 IP
  3. 不要对公网暴露 2222(哪怕改端口也不等于安全)

常见坑排查

1)仍然提示 KEX 不匹配

确认你连的是 2222,且 sshd 真的在监听 2222:

netstat -lntp | grep ':2222'

2)能连上但密码不对 / 不能 root 登录

检查 sshd_config 是否启用了:

PermitRootLogin yes
PasswordAuthentication yes
UsePAM no

必要时重设 root 密码:

passwd root

3)防火墙规则填错

最典型错误是把“目标区域”选成 lan。
正确应该是:源=lan,目标=此设备/input,端口=2222,动作=接受


总结

这类问题的本质是:系统升级导致 SSH 算法集变更,老客户端(Xshell4)无法协商出共同算法
最稳妥的解决方式是:

  • 保留原有 22(dropbear)
  • 新增一个兼容端口 2222(OpenSSH)
  • 只在内网开放 2222(并建议限制源 IP)

这样既兼容老客户端,也不破坏原有使用习惯。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注