SSH 连不上新 VPS?端口改一下就好了

先说说为什么要写这个博客

最近买了一台服务器,想着把自己折腾过程中遇到的问题、学到的小东西记录下来。一方面是给自己留个备忘录,以后忘了还能翻回来看;另一方面也希望能帮到跟我一样不是程序员、但又喜欢折腾的普通人。

我不懂代码,但我觉得有些东西,只要踩过坑、解决过,把过程记下来,别人就少走弯路。这是这个博客的第一篇文章,记录的是博客刚建好就碰到的第一个问题。


遇到了什么问题

服务器买的是搬瓦工的 VPS,机房在美国加州。买好之后,我想从电脑连进去操作,就在终端(就是那个黑框框)里输入了连接命令:


ssh root@67.2xx.1xx.94 -p 22

结果报了这个错:


Connection closed by 67.2xx.1xx.94 port 22

翻译过来就是:”连接被关掉了。”

IP 地址是对的,端口也是对的,但就是连不进去,一头雾水。


怎么查出问题的

先加个”放大镜”看看连接过程

在连接命令里加了一个参数,让它显示详细过程:


ssh -vvv root@67.2xx.1xx.94 -p 22

输出了一大堆信息,其中有一行很关键:


kex_exchange_identification: Connection closed by remote host

这句话的意思是:我的电脑刚和服务器”打了个招呼”,对方就直接把电话挂了,连自我介绍都没来得及说。

登进服务器后台看看

搬瓦工有个网页版的控制台,可以直接在浏览器里登进服务器。登进去之后查了一圈:

  • SSH 服务是开着的 ✅
  • 22 端口也在正常工作 ✅
  • 服务器防火墙没有挡我 ✅
  • 服务器的连接记录里……完全没有我的记录

最后这一条才是关键。服务器完全不知道我来连过,说明我的请求根本没到达服务器——在路上就被拦截了


问题出在哪里

在中国大陆访问境外服务器,中间会经过防火长城(大家常说的”墙”)的检查。

SSH 是一种远程连接工具,它有自己的”暗号”——连接的时候会先发一串特定的标识。防火长城认出这个暗号之后,觉得”这个不让过”,就直接把连接掐断了。

所以你在这边连了半天,服务器那边完全不知道,日志里一条记录都没有。


怎么解决的

把连接用的端口从 22 改成 443

端口可以理解成”门牌号”,22 是 SSH 默认走的门,443 是普通网页访问(HTTPS)走的门。防火长城对 443 这扇门管得比较松,因为大家平时上网都要走这个门,堵了的话太多网站上不去,所以它不敢随便拦。

在服务器后台的控制台里输入两行命令,让 SSH 也走 443 这扇门:


echo "Port 443" >> /etc/ssh/sshd_config
systemctl restart sshd

然后连接的时候改一下端口号:


ssh root@67.2xx.1xx.94 -p 443

这次直接连进去了,完全没有任何问题。


总结

|——|——|———-|

问题 原因 解决方法
SSH 22 端口连不上境外服务器 防火长城拦截了 SSH 连接 把端口改成 443

如果你也在国内用境外服务器,碰到”连接被关掉”但服务器本身没问题的情况,基本上就是这个原因,换个端口试试就行。


我不是程序员,只是个喜欢折腾的普通人。希望这篇文章能帮到你。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注