bash + sshテストをプロセスとして実行する方法

bash + sshテストをプロセスとして実行する方法

私の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

おすすめ記事