2つのサーバー間の接続を確認したい(つまり、sshが成功するかどうか)。
主なアイデアは、中間サーバーのリストを使用して、server-aとserver-bの間の最短の方法を確認することです(たとえば、開発サーバーにいて、prodサーバーに接続したい場合-通常、直接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
あなたが私が探しているものを理解してほしいですか?
サーバーの接続を確認するために、4つのツールを自由に使用できます。
ping
これにより、接続しようとしているサーバーのいずれかが確認されますが、たとえば、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
traceroute
接続を確認するために使用できる別のコマンドは、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
サーバーへの接続をチェックするラフな1つのライナーを作成できます。
$ 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
telnet
このテストを使用すると、基本的なssh
だけを使用して、別のサーバーでtelnet
サーバーにアクセスできるかどうかを確認できます。
$ echo quit | telnet skinner 22 2>/dev/null | grep Connected
Connected to skinner.
nc
もポートに「ping」できます
nc -z hostname 22
これにより、マシンが通常のping(ICMP)に応答しないように構成されている場合でも、マシンのポート22にpingを実行できます
または、ConnectTimeout=1
などの設定オプションを設定して、SSH時間を短縮することもできます。 UseDNS=no
は、逆引きDNSが正しく構成されていないシステムにも役立ちます。