OpenSSH 8.8 以后版本跟老版的兼容性问题
缘起
最近发现 ssh 到自己的路由器,发现连不上,报错:
Unable to negotiate with 10.0.0.1 port 22: no matching host key type found. Their offer: ssh-rsa
NOTE: 上面的 “10.0.0.1” 是服务器的 IP 地址
原因
网上查了下,发现是 OpenSSH 新版本的锅。OpenSSH 8.8 开始,缺省不再支持使用 SHA-1 hash 算法的 RSA 签名。
其实这个变动对稍稍新一点的 OpenSSH 服务器(据说 7.2 及以后版本)没有问题,因为其除了 SHA-1 外,还支持 SHA-256、SHA-512 等更强壮的算法。ssh-rsa 的密钥会自动使用更强壮的 hash 算法了。
但是对一些较老的 OpenSSH 服务器(7.2 以前版本),则就有问题了,因为其对 ssh-rsa 只支持 SHA-1 一种 hash 算法。但此时客户端又不支持这种算法,故而连接会失败。系统上面的错误。
解决方法
ssh 连接有问题的服务器时,加上两个参数即可。如:
1 | ssh \ |
todo list
- 更新自己的密钥对,使用
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/pk4ym_ed25519 -C "[email protected]"
- 把新的公钥部署到服务器上去,包括 github