检查与其他服务器的连接的方法

检查与其他服务器的连接的方法

我想检查两台服务器之间的连接(即 ssh 是否成功)。

主要思想是使用中间服务器列表检查服务器 a 和服务器 b 之间的最短路径(例如,如果我在开发服务器上并且我想连接到生产服务器 - 通常直接 ssh 会失败)。

因为这可能需要一段时间,所以我不想使用 SSH - 相反,我更喜欢先检查是否可以连接,如果可以,则尝试通过 SSH 连接。

获得这个想法的一些可能途径:

server-a -> server-b
server-a -> middle-server-1 -> server-b
server-a -> middle-server-6 -> server-b
server-a -> middle-server-3 -> middle-server-2 -> server-b

希望你明白我在寻找什么?

答案1

为了检查服务器连接,您可以使用 4 个工具。

  1. 例如,这将检查您是否尝试连接任何服务器,但无法查看 middle-server-1 是否可以到达 server-b。

    您可以通过使用计数开关 ( -c) 来控制 ping 尝试对另一台服务器执行 ping 操作的时间长度。将其限制为 1 就足够了。

    $ ping -c 1 skinner
    PING skinner (192.168.1.3) 56(84) bytes of data.
    64 bytes from skinner (192.168.1.3): icmp_req=1 ttl=64 time=5.94 ms
    
    --- skinner ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 5.946/5.946/5.946/0.000 ms
    

    您可以通过使用此变量 来检查此命令的状态$?。如果它的值为 0,则表示成功,否则会出现问题。

    $ echo $?
    0
    
  2. 跟踪路由

    另一个可用于检查连接性的命令是traceroute

    $ traceroute skinner
    traceroute to skinner (192.168.1.3), 30 hops max, 60 byte packets
    1  skinner (192.168.1.3)  0.867 ms  0.859 ms  0.929 ms
    

    同样,此工具不会显示通过一台服务器到另一台服务器的连接(与 ping 相同的问题),但它会显示您通过网络到达另一台服务器的路径。

  3. SSH

    ssh可用于BatchMode测试连接性。您BatchMode=yes将尝试连接到另一台服务器,绕过用户名/密码和仅公钥/私钥的使用。这通常会大大加快速度。

    $ ssh -o "BatchMode=yes" skinner
    

    您可以构建一个粗略的班轮来检查与服务器的连接:

    $ ssh -q -o "BatchMode=yes" skinner "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK
    
    SSH_OK
    

    如果成功,您将收到一条SSH_OK消息,如果失败,您将收到一条SSH_NOK消息。

    此方法的替代方法是也包含该ConnectTimeout选项。这将防止ssh客户花费很长时间。像这样的事情通常是可以接受的ConnectTimeout=5。例如:

    $ ssh -o BatchMode=yes -o ConnectTimeout=5 skinner echo ok 2>&1
    ok
    

    如果失败,它将看起来像这样:

    $ ssh -o BatchMode=yes -o ConnectTimeout=5 mungr echo ok 2>&1
    ssh: connect to host 192.168.1.2 port 22: No route to host
    

    它还将设置返回状态:

    $ echo $?
    255
    
  4. 远程登录

    您可以使用此测试来查看是否ssh可以使用基本的方法在另一台服务器上访问服务器telnet

    $ echo quit | telnet skinner 22 2>/dev/null | grep Connected
    Connected to skinner.
    

答案2

nc也可以“ping”端口

nc -z hostname 22

这样,即使计算机配置为不响应常规 ping (ICMP),您也可以 ping 计算机上的端口 22

答案3

或者,您可以尝试通过设置一些配置选项(例如ConnectTimeout=1.UseDNS=no还可以帮助未正确配置反向 DNS 的系统。

相关内容