背景与需求
我有一台 iStoreOS / OpenWrt 软路由(旁路由),系统升级到:
- LuCI:istoreos-24.10 branch
- iStoreOS:24.10.5 (2025123110)
升级后出现问题:Xshell4 无法连接 SSH,弹窗报错:
找不到匹配的 key exchange 算法(Key Exchange)
我的需求很明确:
- 必须继续使用 Xshell4(老客户端,不能升级)
- 不要动原来的 22 端口(给新客户端或现有脚本/习惯用)
- 最好通过 iStoreOS 的 Web 后台可操作(含防火墙规则)
最终我采用的方案是:
✅ 保留 dropbear(22) 不变,另外安装并启用 OpenSSH(2222),专门开启兼容 Xshell4 的老算法。
原因说明:为什么升级后突然连不上?
iStoreOS/OpenWrt 默认 SSH 服务通常是 dropbear。系统升级后,服务端可能只允许更现代、更安全的加密套件(KEX / HostKey / MAC / Cipher)。
而 Xshell4 太旧,常常只支持或优先使用一些老算法(比如 diffie-hellman-group1-sha1、ssh-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 上开启了较弱的算法组合。请务必做到至少一条:
- 只允许内网访问 2222(不要从 WAN 放行)
- 最好在防火墙规则里限制 源地址=你的电脑 IP
- 不要对公网暴露 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)
这样既兼容老客户端,也不破坏原有使用习惯。
