このスクリプトがあります。
#!/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秒以上接続できます。