私のBashスクリプトは、次の構文を使用してSSH接続テストをテストします。
IP=12.3.4.55
sshpass -p secret123 /usr/bin/ssh -n -o ConnectTimeout=100 -o StrictHostKeyChecking=no -xaq -q root@$IP exit
[[ $? -eq 0 ]] && echo ssh test is ok || echo ssh test is fail
しかし、私は&を使いたいです(それで、すべてのssh行はssプロセスを実行します)
だから私はこれをしました。
IP=12.3.4.55
sshpass -p secret123 /usr/bin/ssh -n -o ConnectTimeout=100 -o StrictHostKeyChecking=no -xaq -q root@$IP exit &
[[ $? -eq 0 ]] && echo ssh test is ok || echo ssh test is fail
しかし、上記の最後の例のsshテストは無効なIPアドレスでも機能するため、sshテストが失敗しても$?
もしそうなら、&を使用してすべてのssh構文をどのように設定しますか?
注 - オンラインに追加したいのは、1000を超えるLinuxシステムをスキャンする必要があり、&を使用する方が速いからです。
ベストアンサー1
スクリプトがバックグラウンドで実行され、複数の接続を並列にテストできるように、テストを関数に移動するだけです。
#!/bin/bash
testConnection(){
user=$1
ip=$2
sshpass -p secret123 /usr/bin/ssh -n -o ConnectTimeout=100 -o StrictHostKeyChecking=no -xaq -q "$user"@"$ip" exit
[[ $? = 0 ]] && echo "$user@$ip OK" || echo "$user@$ip FAILED"
}
users=( terdon terdon )
ips=( 123.4.5.6 127.1.0.0 )
for ((i=0;i<${#users[@]};i++)); do
testConnection "${users[i]}" "${ips[i]}" &
done
## The script should wait and not exit until
## all background processes finish.
wait
その後、次のように実行できます。
$ foo.sh
[email protected] FAILED
[email protected] OK