适用场景:你必须继续使用 Xshell4 这类老 SSH 客户端,但系统是 Ubuntu 24.04 LTS Server(OpenSSH 新版本),默认算法更现代,导致老客户端握手失败或无法用 root+密码登录。本文给出一个可用的“老派方案”。
我的需求
- 必须继续使用 Xshell4
- 连接 Ubuntu 24.04 的 22 端口
- 希望用 root + 密码 登录(老派习惯)
- 最终实现:Xshell4 能正常 SSH 登录 root
背景:为什么 Xshell4 会连不上?
Ubuntu 24.04 的 OpenSSH 默认偏安全,很多旧算法会被禁用或优先级降低。
而 Xshell4 往往只支持/优先使用一些老算法,比如:
- 旧的 KEX:
diffie-hellman-group1-sha1/group14-sha1 - 旧的主机密钥算法:
ssh-rsa - 旧的 MAC/Cipher:
hmac-sha1、aes*-cbc、甚至3des-cbc
因此会出现类似错误:
- “找不到匹配的 key exchange 算法”
- 或握手/认证阶段失败
风险提示(必须读)
为了兼容 Xshell4,需要启用 SHA1 / CBC / ssh-rsa 等旧算法,这些算法安全性较弱。
强烈建议:
- 只在内网使用(虚拟机/局域网环境)
- 不要把 22 端口直接暴露到公网
- 如果必须公网使用,至少限制来源 IP、防火墙、Fail2ban、或者改为密钥登录
本文仅为“兼容老工具”的实用方案。
1)安装并确认 SSH 服务
Ubuntu server 有时是 minimized 环境,先确认 sshd 已安装并监听 22:
sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh ss -lntp | grep ':22'
看到 LISTEN ... :22 即正常。
2)生成主机密钥(确保包含 RSA)
Xshell4 兼容性通常需要 RSA 主机密钥:
sudo ssh-keygen -A ls -l /etc/ssh/ssh_host_*key
应该能看到类似:
/etc/ssh/ssh_host_rsa_key/etc/ssh/ssh_host_ed25519_key/etc/ssh/ssh_host_ecdsa_key
3)为 Xshell4 开启“老算法兼容”(推荐用 drop-in 文件)
Ubuntu 24.04 支持 /etc/ssh/sshd_config.d/*.conf 方式追加配置,比直接改主配置更干净。
创建兼容配置文件:
sudo tee /etc/ssh/sshd_config.d/99-xshell4.conf >/dev/null <<'EOF' # Xshell4 legacy compatibility (weaker algorithms; LAN-only recommended) 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 PasswordAuthentication yes EOF
说明:
- 这是“优先能连上”的组合,偏兼容,不偏安全。
4)启用 root + 密码登录(老派模式)
4.1 设置 root 密码
Ubuntu 默认 root 可能锁定,必须显式设置密码:
sudo passwd root
4.2 允许 root 通过密码登录
编辑刚才的 drop-in 文件:
sudo vi /etc/ssh/sshd_config.d/99-xshell4.conf
在末尾追加:
PermitRootLogin yes
注意:如果你用
vi直接编辑系统文件,务必使用sudo vi ...,否则会只读无法保存。
5)检查配置并重启 SSH
sudo sshd -t sudo systemctl restart ssh
验证最终生效配置(可选但很实用):
sudo sshd -T | egrep 'permitrootlogin|passwordauthentication|kexalgorithms|hostkeyalgorithms|pubkeyacceptedalgorithms|ciphers|macs'
6)Xshell4 连接参数
- Host:Ubuntu 主机 IP(例如
192.168.50.123) - Port:
22 - User:
root - Password:你刚设置的 root 密码
至此,Xshell4 应该可以直接 root+密码登录 Ubuntu 24.04。
常见问题排查
1)还是提示 “key exchange” 不匹配
确认配置文件路径正确:/etc/ssh/sshd_config.d/99-xshell4.conf
并确认语法无误:
sudo sshd -t
2)能握手但 root 登录失败
确认:
- 是否执行过
sudo passwd root - 配置是否包含
PermitRootLogin yes - 重启过 SSH:
sudo systemctl restart ssh
3)编辑文件提示只读
你可能忘记 sudo 打开:
sudo vi /etc/ssh/sshd_config.d/99-xshell4.conf
最后建议(更稳一点)
如果你能接受稍微“现代”一点,建议把 root+密码改成:
- root 只允许密钥登录:
PermitRootLogin prohibit-password - 或者仍用普通用户登录 + sudo
但如果你像我一样坚持老派,那至少确保 SSH 只在内网可达。
