
ホストシステムで次の簡単なコマンドを実行します。
apt update > /dev/null 2>&1 && apt upgrade -y > /dev/null 2>&1 && wget -4 -q --header 'XXXX' -O - https://raw.githubusercontent.com/XXX/add.sh | bash -x
私の人生をより簡単にするためにbase64を使用してエンコードしてからホストでデコードするので、私の端末が邪魔になることを心配する必要はありません。
parallel-ssh -t 500 -O StrictHostKeyChecking=no -i -h /root/hosts -x "-i /root/.ssh/ssh_host_ed25519_key" 'BASE64 STRING | base64 -w 0 -d | bash'
しかし、私のスクリプトはホストコンピュータで2回実行されます。理由はわかりません。ホストの元のコマンドは期待どおりに機能し、shスクリプトをbashにパイプして一度だけ実行します。パラレルSSHで動作が変更されました。
なぜ?
答え1
GNU Parallelがある場合は試してください(テストされていません):
env_parallel --session
doit() {
apt update > /dev/null 2>&1 &&
apt upgrade -y > /dev/null 2>&1 &&
wget -4 -q --header 'XXXX' -O - https://raw.githubusercontent.com/XXX/add.sh |
bash -x
}
env_parallel --nonall --ssh 'ssh -O StrictHostKeyChecking=no -i -h /root/hosts -x "-i /root/.ssh/ssh_host_ed25519_key"' -S server1,server2 doit
env_parallel --end-session