带for循环的远程SSH命令

时间:2019-07-03 22:09:06

标签: bash shell unix ssh

我正在从远程计算机上的客户端计算机运行ssh命令:

ssh  -o "StrictHostKeyChecking no" -i $key 'user'@$public_ip "    
i=1;
workerips: "ip1 ip2";
for ip in $worker_ips; do
    echo \"ipis: ${ip} and i is ${i}\"
done;"

我的问题是'for'循环内的'$ ip'和'$ i'为空。 '$ i'将其值保留在for循环之外。我在做什么错了?

2 个答案:

答案 0 :(得分:3)

使用Heredoc做这样的事情更容易

$ ssh -o "StrictHostKeyChecking no" -i "$key" user@$public_ip << \EOF
> i=1
> workerips="ip1 ip2"
> for ip in $workerips; do echo "ipis: ${ip} and i is ${i}"
> done
> EOF

答案 1 :(得分:1)

根据您要执行的操作,并行ssh程序(pssh)可能适合您。

https://linux.die.net/man/1/pssh

这个想法是,您可以跨定义的节点(全面或批量)执行相同的命令。基本的工作量可能是跨多个节点更新配置文件,更复杂的情况包括跨Cassandra群集的快照之类的事情,以确保您几乎同时运行这些快照。