ファイル内の複数のホストにSSHで接続し、コマンドを実行すると失敗します。最初のホストにのみ移動します。

ファイル内の複数のホストにSSHで接続し、コマンドを実行すると失敗します。最初のホストにのみ移動します。

このスクリプトがあります。

#!/bin/sh
SERVERLIST=hosts
ICMD='cat /etc/redhat-release'
while read SERVERNAME
do
   ssh $SERVERNAME $ICMD
done < "$SERVERLIST"

良いhosts

hostname
hostname
hostname

スクリプトを実行すると、./run.sh単一のホストに移動して停止します。完全なホストのリストを読み取れないのはなぜですか?

ベストアンサー1

sshは、起動速度を上げることができるstdinを事前に読み取るためにリモート操作にいくつかのデータが必要であると仮定します。したがって、最初のタスクはホストリストの残りの部分を占めます。

ssh -nこのオプションを使用するか、リダイレクト(たとえば、ssh < /dev/nullトリッキーな人として、私は次の両方を行いますssh -n < /dev/null <other ssh options>

リモート操作がローカルシステムから何かを読み取るようにするには、各反復ごとにそれらをパイプするか、ここに文書化する必要があります。使用される場合でも、for <host>ssh は各ホストに対して stdin から不確実な量のデータの読み取りを開始します。

SSH経由でアクセスする前に、必ずリモートホストにpingを実行してステータスを確認してください。 IIRCにはping -Wハードタイムアウトオプションがあり、不明またはssh死んだホストの場合はDNSに停止するか、90秒以上接続できます。

おすすめ記事