SSHを介してサーバーのリストを操作する必要があります。
sshpassを使用していますが、操作は失敗する可能性がありますが、数回発生し、スクリプトは続行する必要があります。
#!/bin/bash
while read address; do
echo -n "$address "
sshpass -p password ssh -o StrictHostKeyChecking=no user@$address 'ls /path/to/some/dir'
done < address-list
ただし、sshを介した最初のホストでは、コマンドは失敗し、スクリプトはすぐに終了します。
とにかくループを実行し続けるにはどうすればよいですか?コマンドの後にシャットダウンを追加しても問題は解決されず、エラーシャットダウン設定をオフにしてもset +e
機能しません。
答え1
ssh
ループは標準入力ストリームを継承し、できるだけ読み込みます。つまり、ファイルの残りの行を読みますaddress-list
。ssh
ファイルから残りの行を読み取っているので、ループは1回の反復のみを実行します。技術的には、スクリプトは早期に終了しません。失敗するとにかく、好きなようにはなりません。
これを防ぐには、次のように標準入力から読み取るのをssh -n
防ぎます。ssh
while read address; do
echo -n "$address "
sshpass -p password ssh -n -o StrictHostKeyChecking=no "user@$address" 'ls /path/to/some/dir'
done < address-list
ssh
この方法で実行すると、リモートホストで起動された一部のプログラムにデータを渡すことができますが、見つかったようにループが正しく機能しなくなります。