2つのサーバー間の接続を確認したい(つまり、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つのツールを使用できます。
平らな
たとえば、これはサーバーに接続しようとしているかどうかを確認しますが、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
追跡パス
接続を確認するために使用できるもう1つのコマンドはです
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と同じ問題)、ネットワークを介して別のサーバーに接続するパスを表示します。
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
リモートログイン
ssh
このテストでは、デフォルトの方法を使用して他のサーバー上のサーバーにアクセスできることを確認できますtelnet
。$ echo quit | telnet skinner 22 2>/dev/null | grep Connected Connected to skinner.
答え2
nc
ポートを「ping」することもできます。
nc -z hostname 22
これにより、コンピュータが通常のping(ICMP)に応答しないように設定されていても、コンピュータのポート22をpingできます。
答え3
または、次の設定オプションをいくつか設定して、リバースDNSで正しく設定されていないシステムを支援することもできますConnectTimeout=1
。UseDNS=no