先说说为什么要写这个博客
最近买了一台服务器,想着把自己折腾过程中遇到的问题、学到的小东西记录下来。一方面是给自己留个备忘录,以后忘了还能翻回来看;另一方面也希望能帮到跟我一样不是程序员、但又喜欢折腾的普通人。
我不懂代码,但我觉得有些东西,只要踩过坑、解决过,把过程记下来,别人就少走弯路。这是这个博客的第一篇文章,记录的是博客刚建好就碰到的第一个问题。
遇到了什么问题
服务器买的是搬瓦工的 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 |
如果你也在国内用境外服务器,碰到”连接被关掉”但服务器本身没问题的情况,基本上就是这个原因,换个端口试试就行。
我不是程序员,只是个喜欢折腾的普通人。希望这篇文章能帮到你。