几个月前(我这是有多懒!)有一天早上一开机,发现Bitvise SSH客户端连不上服务器了,报了一个KEX错误:
09:41:56.381 Connecting to SSH2 server shelu.net:22.
09:41:56.751 Connected.
09:41:56.761 Starting first key exchange.
09:41:57.942 Server version string: SSH-2.0-OpenSSH_5.3
09:41:57.946 Session terminated on client’s behalf:
SSH_DISCONNECT_KEY_EXCHANGE_FAILED
failed to negotiate key exchange algorithm
把客户端里头所有的key exchange全选上了,也不管事儿。PuTTY也连不上,直接就connection reset了。买这个共享服务器除了博客,还有一个主要作用就是当梯子了,毕竟VPN容易被封,而且PC上还是Chrome加SwithySharp方便些,访问国内网站速度也快。于是找Bluehost客服,客服给了一篇文档:SSH Access – Generating a Public/Private Key,大概意思是怎么通过一个key来登录SSH,PuTTY试了一下,不行,说bad connection;而且觉得也不靠谱,毕竟Bitvise里头没有这个选项。于是Google一下错误信息,SSH连接建立的时候服务器和客户端要沟通一下支持的加密算法,最后选一种双方都支持的,应该是服务器升级了SSH服务之后把很多的Key Exchange算法给屏蔽了,而我的客户端不支持他的算法。于是再找客服,说了这个问题,结果人就说我这儿好着呢,能连上,那不是我们的问题。我说我这儿有一段代码(修改SSHD配置并重启),你在服务器上执行一下呗。。。果断被拒绝,并趁机推销:买个dedicated server吧,这样你就有root权限想干嘛就干嘛。。。果断拒绝。
既然服务器端解决不了问题,那就只能找找自己的问题了,先升级一下Bitvise,这下错误信息就很能说明问题了:
The SSH2 session has terminated with error. Reason: Error class: LocalSshDisconn, code: KeyExchangeFailed, message: FlowSshTransport: no mutually supported key exchange algorithm. Local list: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1. Remote list: diffie-hellman-group-exchange-sha256.
选中diffie-hellman-group-exchange-sha256后顺利连上。
下载了最新的PuTTY之后还是不行,还是bad connection,查了一下,PuTTY是支持diffie-hellman-group-exchange-sha256的(包含在Diffie-Hellman group exchange里头)。想起来最早的时候PuTTY是connection reset,那可能是前面配private key的时候弄坏了,重新配了一下就可以了。
PS:最近试了一下AWS,虽然我只launch了一个Windows instance, 但是如果来一个centos之类的话用那个22端口应该也是可以达到梯子的效果的,AWS可以免费用12个月。