SSHとTelnetを介して他のホストから特定のホストへのネットワーク接続をテストします。

SSHとTelnetを介して他のホストから特定のホストへのネットワーク接続をテストします。

ホスト名/ IPリストのポートが開いていることを確認しようとしており、この単純なスクリプトを使用して各ホストにsshで接続して出力をキャプチャします。

for i in `cat $1`
do ssh $i "sleep 5 | telnet 11.22.33.44 123"
done

Telnetはスマート端末と対話するための対話型ツールとして設計されているため、「環境固有の端末時間なし」エラーが発生します。

ncUnix AIX システムではコマンドが使用できないため、このコマンドは使用できないことがわかります。この問題をどのように解決しますか?

Connected to 11.22.33.44. Escape character is ^]一部のホストは接続があることを意味するとして応答し、他のホストは接続がTrying ...ないことを意味するように応答します。

ベストアンサー1

Perl はデフォルトでインストールされるので、中間ホストに SSH で接続して Perl の実行を要求するのは 1 つの方法です。 Perl プログラムは、次のドキュメントで使用できます。

for host in $(< "$1")
do

  ssh "$host" perl << 'EOF'
use IO::Socket;
my $handle = IO::Socket::INET->new(
        PeerAddr => '11.22.33.44',
        PeerPort => 123,
        Proto    => 'tcp',
        Timeout  => 5)
    or die "Failed\n";
close $handle;
print "Success\n";
EOF

done

スクリプトは TCP を介して指定された IP とポートに接続しようとします。失敗するとFailedメッセージが表示されますが、成功するとすぐに接続を閉じ、最初の引数Takeで指定されたファイル名を読み取りますSuccess$(< ...);同様に、catこのスキームでは、すべてのファイル名に文字$IFS(デフォルトではスペース、タブ、または改行)が含まれていないと仮定します。また、host入力ファイルの内容にシェルワイルドカード文字(たとえば*、または)が含まれている?場合は、問題を回避するためにループ変数(ここ)を引用しました[

おすすめ記事