同じパスワードが設定されている複数のサーバーのコンテンツを確認する単純な1行のforループがあります。私はこのライナーをIPアドレスを介してサーバークラスタにログインし、パスワードの入力を求め、コマンドを実行するスクリプトとして開発したいと思います。たとえば、サービスを再起動します。これが私が使用するものです:
for i in {1..253}
do sshpass -p PASSWORDHERE ssh -o StrictHostKeyChecking=no [email protected].${i} 'hostname
echo "Checking if foo.log exists: `ls -lh /var/log/foo.log | wc -l`"
echo "Checking if bar.log is present: `ls -lh /var/log/bar.log | wc -l`"
' 2>/dev/null; echo ""; done
私のスクリプトが弱いので、どこから始めるべきかわかりません。ところで、私は基本的なツールセットを使ってこれを達成したいと思います。サードパーティをインストールできません。
助けてくれてありがとう。
ベストアンサー1
for i in {1..253}
do
ip=192.168.1.${i}
echo "Enter password for: $ip"
read pswd
case "$pswd" in
*) password=$pswd;;
esac
sshpass -p "$password" ssh -o StrictHostKeyChecking=no username@$ip 'hostname
echo "Checking if foo.log exists: `ls -lh /var/log/foo.log | wc -l`"
echo "Checking if bar.log is present: `ls -lh /var/log/bar.log | wc -l`"
' 2>/dev/null
done
それでは効果があるでしょう。テスト中にループの実行に疲れたり、より小さい範囲(たとえば1〜5)を使用してデバッグする場合は、Ctrl + Cを押すとループが終了します。