搬瓦工能 ping 通但是 SSH 无法连接的原因和解决方法

搬瓦工可以 ping 通,但是 SSH 又连不上,怎么办?TCP 被封了?啥是 TCP?等等类似的问题,最近问的尤其多。

看了看这篇文章最早编辑于 5 月25 日,拖到现在发出来,真是拖延症晚期了。

下面分别从原因和解决方法两方面阐述一下。

原因

说原因之前,我们先科普一下。

ping 是一种计算机网络工具,用来测试数据包能否通过 IP 协议到达特定主机。ping 的运作原理是向目标主机传出一个 ICMP echo@ 要求数据包,并等待接收 echo 回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。

简单来说,ping 发送 ICMP 报文,而 ICMP 报文被封装在 IP 报文里。一个 ICMP 报文格式如下:

ICMP 是一个网络层的协议(TCP/IP 五层模型建议自己去了解一下)。

与之相对,TCP 是一个传输层的协议,TCP 位于 IP 层之上,一个 TCP 报文的格式如下:

TCP 三次握手什么的,这里也不多说了,有兴趣的自己去看吧,不是今天的重点。与 TCP 在同一层的另一个重要协议就是 UDP 了。

说到这里再多说一句,TCP 是需要指定端口号的,但是 ICMP 并不需要端口号。因为端口是传输层的概念,而之前已经说过 ICMP 处于网络层。

SSH,Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH协议框架中最主要的部分是三个协议:

  • 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等的支持。
  • 用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。
  • 连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。

可以看到 SSH 的三个协议之一就是传输层协议。理论上 SSH 是可以基于 TCP 或者 UDP 的,但是实际使用过程中,SSH 客户端都只监听 TCP,相关的 RFC 文档中其实也只提到了 TCP,所以我们可以简单的理解为 SSH 就是基于 TCP 的。此外,既然是传输层的东西,就有端口的概念,SSH 的默认端口号是 22,可以自己修改(搬瓦工 SSH 修改端口号的方法)。

说了这么些,出现问题的原因就很简单了

  • 能 ping 通:因为 ping 采用的是 ICMP 报文,所有 ICMP 报文都被放行了;
  • 不能登录 SSH:因为 SSH 采用的是 TCP 报文,所有 TCP 报文都被丢弃了。

解决方案

之前还跟人说,换端口试试,但是发现,换端口并没有什么用处。所以解决方法简单而暴力:换 IP。

换 IP 的方法参考:

其他注意事项

购买 VPS 请都用作正规用途。

关于购买时候机房如何选择:

关于如何迁移机房:

关于迁移机房的限制:

关于推荐的方案:

关于便宜方案和香港方案的补货时间以及补货通知:

未经允许不得转载:Bandwagonhost中文网 » 搬瓦工能 ping 通但是 SSH 无法连接的原因和解决方法

赞 (0)

评论 9

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 老立现在端口貌似好像大概或许应该可能也许会随机分配回复
    • bandwagonhostSSH 端口?回复
      • 老立嗯,我买的香港就不是22回复
  2. rio说了这么一大堆, 你叫我直接换IP?回复
    • bandwagonhost你也可以选择换端口啊,但是没什么用呗。回复
  3. yoyo那能ping通能ssh连接就是不能酸酸是为啥呢回复
    • bandwagonhost配置错误。回复
  4. yekongle我才买几天就不能连上了回复
    • bandwagonhost修改端口后可以直接重启生效。回复