XShell 连接服务器报错“找不到匹配的 host key 算法“解决方案

问题描述
在使用 XShell 连接 Linux 服务器时,遇到以下错误:
找不到匹配的 host key 算法
Unable to negotiate with xxx.xxx.xxx.xxx port 22: no matching host key type found.
这是因为 SSH 客户端和服务器端支持的加密算法不匹配导致的。
解决方法
通过修改服务器端的 SSH 配置文件,添加更多兼容的加密算法即可解决。
步骤 1:登录服务器
首先需要通过其他方式登录到服务器(如控制台、VNC 等)
步骤 2:编辑 SSH 配置文件
sudo vi /etc/ssh/sshd_config
步骤 3:添加加密算法配置
在配置文件中添加以下内容(建议添加到文件末尾):
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
HostKeyAlgorithms ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ssh-ed25519

配置说明:
KexAlgorithms:密钥交换算法HostKeyAlgorithms:主机密钥算法
步骤 4:保存并退出
- 按
ESC键 - 输入
:wq保存并退出
步骤 5:重启 SSH 服务
# CentOS/RHEL 系统
sudo systemctl restart sshd
# 或者使用 service 命令
sudo service sshd restart
# Ubuntu/Debian 系统
sudo systemctl restart ssh
步骤 6:验证配置
重启服务后,使用 XShell 重新连接,问题解决!
验证 SSH 服务状态
如果想确认 SSH 服务是否正常运行:
# 查看 SSH 服务状态
sudo systemctl status sshd
# 查看 SSH 服务监听端口
sudo netstat -tlnp | grep sshd
注意事项
⚠️ 安全提示:
- 启用
diffie-hellman-group1-sha1等旧算法存在一定安全风险 - 如果是内网环境,可以放心使用
- 如果是公网服务器,建议只在必要时启用,或考虑升级 XShell 客户端
💡 小贴士:
- 修改配置前建议先备份原文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak - 如果重启服务后无法连接,可以通过控制台恢复备份文件
其他解决方案
如果修改服务器配置不方便,也可以:
- 升级服务器 OpenSSH 版本(推荐,更安全)
- 修改 XShell 客户端配置(在会话属性中启用更多算法)
- 更换其他 SSH 客户端(如 MobaXterm、FinalShell 等)
总结
通过修改服务器 SSH 配置文件,添加兼容的加密算法,可以快速解决 XShell 连接报错的问题。这个方法简单高效,适合有服务器管理权限的场景。
参考资源:
- OpenSSH 官方文档:https://www.openssh.com/
- SSH 配置手册:
man sshd_config
希望这篇文章对你有帮助!如果遇到问题,欢迎留言交流。











