他のサーバーとの接続を確認する方法

他のサーバーとの接続を確認する方法

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つのツールを使用できます。

  1. 平らな

    たとえば、これはサーバーに接続しようとしているかどうかを確認しますが、middle-server-1がserver-bに接続できることを確認できません。

    カウントスイッチ()を使用して、-cpingが他のサーバーに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. 追跡パス

    接続を確認するために使用できるもう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と同じ問題)、ネットワークを介して別のサーバーに接続するパスを表示します。

  3. SSH

    ssh接続をテストするために使用できますBatchModeBatchMode=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)に応答しないように設定されていても、コンピュータのポート22をpingできます。

答え3

または、次の設定オプションをいくつか設定して、リバースDNSで正しく設定されていないシステムを支援することもできますConnectTimeout=1UseDNS=no

関連情報