Nir*_*Nir 10 linux networking ssh
我想检查两台服务器之间的连接(即 ssh 是否成功)。
主要思想是使用中间服务器列表检查 server-a 和 server-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
Run Code Online (Sandbox Code Playgroud)
希望你明白我在找什么?
slm*_*slm 13
为了检查服务器连接,您可以使用 4 个工具。
平
例如,这将检查您是否尝试连接的任何服务器,但无法查看 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
Run Code Online (Sandbox Code Playgroud)
您可以通过使用此变量来检查此命令的状态$?。如果它的值为 0,那么它就成功了,否则就会出现问题。
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)跟踪路由
另一个可用于检查连接性的命令是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
Run Code Online (Sandbox Code Playgroud)
同样,此工具不会显示通过一台服务器到另一台服务器的连接(与 ping 问题相同),但它会向您显示通过网络到达另一台服务器的路径。
ssh
ssh可用于BatchMode测试连通性。随着BatchMode=yes你会尝试连接到另一台服务器,绕过使用用户名/密码和唯一的公共/私有密钥。这通常会加快速度。
$ ssh -o "BatchMode=yes" skinner
Run Code Online (Sandbox Code Playgroud)
您可以构建一个粗略的 liner 来检查与服务器的连接:
$ ssh -q -o "BatchMode=yes" skinner "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK
SSH_OK
Run Code Online (Sandbox Code Playgroud)
如果成功,您将收到一条SSH_OK消息,如果它失败,您将收到一条SSH_NOK消息。
此方法的替代方法是还包括该ConnectTimeout选项。这将防止ssh客户端花费很长时间。像这样的东西通常是可以接受的,ConnectTimeout=5。例如:
$ ssh -o BatchMode=yes -o ConnectTimeout=5 skinner echo ok 2>&1
ok
Run Code Online (Sandbox Code Playgroud)
如果失败,它将看起来像这样:
$ 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
Run Code Online (Sandbox Code Playgroud)
它还将设置返回状态:
$ echo $?
255
Run Code Online (Sandbox Code Playgroud)远程登录
你可以使用这个测试来查看一个ssh服务器是否可以在另一台服务器上使用一个基本的telnet:
$ echo quit | telnet skinner 22 2>/dev/null | grep Connected
Connected to skinner.
Run Code Online (Sandbox Code Playgroud)nc 也可以“ping”端口
nc -z hostname 22
Run Code Online (Sandbox Code Playgroud)
这样,即使机器配置为不响应常规 ping (ICMP),您也可以 ping 机器上的端口 22
| 归档时间: |
|
| 查看次数: |
158375 次 |
| 最近记录: |