我在主机上运行这个简单的命令:
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