ホスト名/ IPリストのポートが開いていることを確認しようとしており、この単純なスクリプトを使用して各ホストにsshで接続して出力をキャプチャします。
for i in `cat $1`
do ssh $i "sleep 5 | telnet 11.22.33.44 123"
done
Telnetはスマート端末と対話するための対話型ツールとして設計されているため、「環境固有の端末時間なし」エラーが発生します。
nc
Unix 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
入力ファイルの内容にシェルワイルドカード文字(たとえば*
、または)が含まれている?
場合は、問題を回避するためにループ変数(ここ)を引用しました[
。