问题描述
某项目,客户使用Xshell5作为SSH客户端远程登录防火墙USG6575E(V600R007C20SPC100),提示Socket error Event: 32 Error: 10053,ssh连接断开,无法登陆设备。
处理过程
检查防火墙SSH配置正确,SSH Server运行正常。
抓包分析客户端与防火墙SSH服务端报文交互过程
发现是服务端在密钥协商后主动断开了连接,下面再进一步服务端和客户端查看密钥协商报文
查看服务端密钥协商报文:
查看客户端密钥协商报文:
根据服务端和客户端密钥协商报文可以看到:服务端只支持的ssh公钥算法为ecdsa-sha2-nistp521,客户端支持的ssh公钥算法为“ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ssh-ed25519” ,即服务器端与客户端所支持的ssh公钥算法无交集,密钥交换协商过程失败
接着查看防火墙上关于ssh服务端的配置
发现当前版本防火墙的配置对比其他版本的防火墙的配置多了一条ssh server publickey ecc,该命令指定公钥算法只允许ecc算法,客户确定没有配置过这个命令,为设备默认配置。
通过查看当前版本的防火墙产品文档,确定出厂配置文件中默认已经配置公钥算法只允许为ecc,并且防火墙默认情况下使用ecc算法生成的本地主机密钥对长度为521(也就是抓包看到的ecdsa-sha2-nistp521)
客户的ssh客户端对于ecc算法生成的密钥对长度只支持256的(ecdsa-sha2-nistp256),在防火墙上使用命令
ecc local-key-pair create重新生成位数为256的本地ECC主机密钥对后验证测试,使用客户的xshell5可以成功ssh登陆设备,问题解决。