![Parallel-ssh는 호스트에서 스크립트를 두 번 실행합니다.](https://linux55.com/image/201872/Parallel-ssh%EB%8A%94%20%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EB%91%90%20%EB%B2%88%20%EC%8B%A4%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4..png)
호스트 시스템에서 다음과 같은 간단한 명령을 실행합니다.
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'
하지만 내 스크립트는 호스트 컴퓨터에서 두 번 실행됩니다. 이유는 모르겠습니다. 호스트의 원래 명령은 예상대로 작동하며 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