SSH连接远程主机超时的一种解决方案

暑假结束了,新学期开始了。

在这个值得开心的日子里,我遇到了一个棘手的问题——我发现在我的电脑上,无法通过ssh的方式连接到我的服务器了。

正常人的思维——重启试试,然而并没有用。

笔者之前还以为是我的服务器问题(该台云服务器是从一个小服务商那边购买的,一直抱着试一试的心态,所以并没有给予其跟阿里云ECS一样的信任,尽管我的阿里云ECS只是小水管,但是我一直很信赖阿里的24小时售后服务),我甚至恶狠狠地向我的云服务商提出质疑,一通tracert命令下来最终我的服务商负责人德克斯特表示也摸不着头脑👇

但是我在此台机器上通过cmd命令窗口使用ssh命令视图连接我阿里云的ECS的时候发现也并不能连接成功,显示的理由与上面相同,都是Connection timed out

我开始坐不住了,脑子里冷静地过了一遍常见ssh连接失败的原因:

①网络问题(排除)

前段时间校园网改造,三路宽带合一,趁着目前正处于三家运营商的信号可以随时切换的机会,我在切换了三种网络和使用手机热点的情况下均不能成功使用ssh连接本人目前拥有的两台云服务器,遂排除。

②云服务器端口问题(ssh端口配置/防火墙配置)(排除)

经过仔细回忆,本人近期并未对防火墙的配置以及ssh端口进行主动修改,且云服务器均无受到黑客攻击的迹象。

③服务商线路问题

本文开头已经提及,此次发现ssh链接远程主机失败的时候使用的正是一台来自小运营商的机子,所以不排除运营商线路故障的可能(此台服务器的带宽为弹性配置,一般情况下速度与普通家用百兆宽带的速度相差无几,之前就因为此运营商的线路故障导致服务器的下载速度一直停留在几十KB每秒,当时查明原因后曾得到该服务商的补偿)。但不幸的是,这次甚至连接不上一直稳定运行的阿里云ECS,让我一脸懵逼。

Google了很久,都没有找到适合我的解决方案(更不用说百度了…多年的经验,真心,真心,真心建议,涉足计算机相关领域的同学最好习惯使用Google进行搜索

于是在9月2日傍晚,无奈之下向阿里云提交工单请求帮助

第一次收到阿里售后工程师的回复是将本地IP添加到ECS的白名单中,然而我在添加到白名单后并没有起作用。

回复工程师后他又让我使用telnet测试,但笔者在测试的时候发现,显示openSSH“遗失对主机的连接”

失望的是,工程师再次回复我的时候表示在他那边进行telnet测试,显示与ECS的通信正常,并让我换个网络试试。然而当我看到工程师附上的截图的时候,我好像获得了什么灵感👇

看到这里,不知道您有没有注意到什么,反正我当时的思维角度挺独特的

我注意到了一个细节:该工程师是在C:\Windows\System32的路径下执行ssh命令的,也就是说,ssh相关的程序其实位于该目录下的某个文件夹中。于是我想起之前在搜索引擎中搜索关键词win10 ssh损坏得到的结果中看到过“open SSH程序要正确开启才能在Windows下正常使用ssh命令功能”。但是之前在排查问题的时候我只是从Win10设置——应用——可选功能中,对open SSH的服务端和客户端进行多次重新安装(安装成功),然而ssh仍然不能正常使用。

仔细一想,我当时并未在C:\Windows\System32路径下仔细检查过open SSH的相关组件是否正常。抱着试一试的心态,打开该路径,使用Everything工具搜索ssh的相关程序,搜出来很多结果但是无法打开,提示“无法正常找到该文件”,甚是让我迷惑…然而,最简单的办法就是重装相应的程序组件。

这种情况下,直接重装系统显然成本过高(之前曾经因为浙江某讯的垃圾客户端的自带bug导致PPPoE模块容易损坏,曾经一日重装过十多次系统…当时是彻底被逼急了,才使出这等无奈的大招)。现在的我已经是成熟的我🤟

毕竟进阶的码农显然不屑于停留在有问题就重装的中等阶段(低等阶段是啥?看上方图片👀),既然重启也重启过了,那么就不如🤪

没错,就是直接从室友的电脑中,进入相同的目录,拷贝一份openSSH的文件在本人的目录中进行覆盖。

然而,你没猜错,并没有解决!

当你看到这里,是不是迫不及待地想按下ctrl+w,并开始在心里咒骂:什么垃圾文章,耽误我时间。但我想说的是,覆盖openSSH目录后,在系统的cmd窗口中进行ssh操作,提示很清楚:缺少libcrypto.dll

难道还不简单吗?

再从室友电脑中同样的路径下,找一个同名的dll,拷贝到自己电脑中,就能完美解决问题了!

当我看到是否将ECDSA 密钥添加到本地hosts中的提示后,我感觉瞬间轻松了,这个困扰我多天的问题终于完美解决。

名词解释

OpenSSH 是SSH(Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。而Windows应该就是采用了OpenSSH来实现远程通信的。

后记:

之前有一次更新Windows系统的时候曾经更新失败过,当然最近也安装过WinSCP等工具,不排除这些过程中造成ssh相关环境被破坏的可能,尤其是前者。

本文标题:SSH连接远程主机超时的一种解决方案

文章作者:zzzain46

发布时间:2019年09月02日 - 21:09

最后更新:2019年10月20日 - 13:10

原始链接:https://www.52debug.cn/posts/5bd4250a.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

如果你觉得我的文章对你有用,请随意打赏!