HCRM博客

CentOS SecureCRT Key Exchange失败故障排查与解决步骤

SecureCRT连接CentOS提示Key exchange failed解决:一次排障实录

SecureCRT连接CentOS提示Key exchange failed解决

CentOS SecureCRT Key Exchange失败故障排查与解决步骤-图1

刚泡好的咖啡还没凉,SecureCRT就弹出一行红字:Key exchange failed。远程CentOS主机明明开着,端口也通,凭据也没改,偏偏卡在密钥交换这一步。很多人第一反应是重启,结果重启完还是一样。别急,下面把踩坑过程原封不动搬出来,照着做,十分钟内就能重新看到熟悉的命令行。

先确认是不是服务端“挑食”

SSH协议版本升级后,CentOS默认把弱算法全部踢出局。如果SecureCRT还在用老配置,两边算法对不上,立刻报Key exchange failed。登到机房本地终端,打开/etc/ssh/sshd_config,搜KexAlgorithms这一行,若看到diffie-hellman-group14-sha256ecdh-sha2-nistp256之类,说明服务器只认高强度算法。再瞄一眼CiphersMACs,如果列出的都是aes256-gcm@openssh.comumac-128-etm@openssh.com这类,老版本SecureCRT根本凑不齐“对暗号”的筹码。

给SecureCRT打补丁不如改配置

很多人跑去下新版SecureCRT,其实9.0之前只要手动开算法就能活。菜单栏依次点:Options → Global Options → General → Configuration Paths,记住路径,关闭软件。用记事本打开SecureCRT.ini,搜索"Key Exchange"字段,把缺省的diffie-hellman-group1改成:

CentOS SecureCRT Key Exchange失败故障排查与解决步骤-图2

KexAlgorithms=diffie-hellman-group14-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521

ciphers=aes256-ctr,aes192-ctr,aes128-ctr,aes256-gcm@openssh.com

MACs=hmac-sha2-256,hmac-sha2-512,umac-128-etm@openssh.com

保存后再开SecureCRT,别急着连,先右键会话 → Properties → SSH2 → Advanced,把“Enable none cipher”勾掉,再把“Enable compression”也关掉,减少变量。

服务器端放宽算法只改一行

CentOS SecureCRT Key Exchange失败故障排查与解决步骤-图3

如果客户端一时升不了级,也可以让CentOS“松口”。在/etc/ssh/sshd_config末尾加:

KexAlgorithms +diffie-hellman-group14-sha1

Ciphers +aes128-ctr

MACs +hmac-sha1

保存后执行systemctl reload sshd,不断现有会话,新连接就能用旧算法过渡。注意,这只是临时方案,生产环境还是尽快把客户端算法补齐,别让弱加密留在内网。

密钥长度与证书链也别忽视

有些单位把RSA主机密钥升到4096位,SecureCRT老版本在握手阶段读到超长证书直接甩手不干,同样报Key exchange failed。此时要么升级客户端,要么在服务器端再生成一副2048位的临时密钥:

cd /etc/ssh

ssh-keygen -t rsa -b 2048 -f sshhostrsa_key.tmp

mv sshhostrsakey.tmp sshhostrsakey

mv sshhostrsakey.tmp.pub sshhostrsakey.pub

systemctl restart sshd

重启后旧客户端就能握手。等新客户端部署完,再把密钥换回去即可。

防火墙与中间设备偷改包

算法都对,仍然Key exchange failed,就要怀疑网络里有没有“老六”。某些WAF或IPS见到SSH握手里的ECDH就误报攻击,直接丢包。把客户端IP加入白名单,或者临时把SSH端口换到高位,绕过监控,再测试。能连上,就说明问题不在系统,而在网络策略。

一次排障 checklist

1. 本地telnet IP 22,看TCP通不通。

服务端ss -tulnp | grep 22确认监听。

ssh -vvv user@ip从另一台Linux试连,看停在哪一步。

对照sshd_config的算法列表,把缺的加到SecureCRT.ini。

改完配置重启SecureCRT,不要只断开会话,必须完全退出重进

如果仍失败,抓包:tcpdump -i any port 22 -w ssh.pcap,用Wireshark过滤ssh.message_code==20,看是哪边先Reset。

常见坑点一句话总结

只升级服务端不升级客户端,算法对不上,必弹Key exchange failed;只升级客户端不检查服务端,白忙活;改配置不重启SecureCRT,新算法不生效;复制粘贴算法时多一个空格,整行失效;把sshd_config改错,sshd -t校验不过,服务直接起不来。

按上面顺序一路敲完,咖啡刚好喝完,SecureCRT里已经出现[user@centos ~]$提示符。下次再遇到Key exchange failed,五分钟就能定位,不用再到处翻旧帖。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/42012.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~