Bash 带有for循环的远程SSH命令

Bash 带有for循环的远程SSH命令,bash,shell,unix,ssh,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;" 我的问题是,“$ip”和“$i”在“for”循环中是空的$i'将其值保持在for循环之外。我做错了什么?用here

我正在远程计算机上的客户端计算机上运行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;"
我的问题是,“$ip”和“$i”在“for”循环中是空的$i'将其值保持在for循环之外。我做错了什么?

用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
$ssh-o“StrictHostKeyChecking no”-i“$key”用户@$public\u ip i=1
>workerips=“ip1 ip2”
>以$workerips表示的ip;do echo“ipis:${ip}而i是${i}”
>完成
>EOF
使用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
$ssh-o“StrictHostKeyChecking no”-i“$key”用户@$public\u ip i=1
>workerips=“ip1 ip2”
>以$workerips表示的ip;do echo“ipis:${ip}而i是${i}”
>完成
>EOF

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


其思想是,您可以跨定义的节点执行相同的命令(可以跨板执行,也可以成批执行)。基本工作负载可能是跨多个节点更新配置文件,更复杂的情况包括跨Cassandra群集的快照,以确保这些配置文件几乎同时运行。

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


其思想是,您可以跨定义的节点执行相同的命令(可以跨板执行,也可以成批执行)。基本工作负载可能会跨多个节点更新配置文件,更复杂的情况包括跨Cassandra群集的快照,以确保这些配置文件几乎同时运行。

第三行是否不应读取
workips=“ip1 ip2”?实际上,您可能需要转义这些引号:
workerips=\“ip1ip2\”。您可能还需要将每个
$
转义到
\$
,以便在远程计算机上而不是本地对其进行解释。感谢将$转义到\$修复了它。我已经在代码中用转义引号写了第三行,但问题中没有包含这一行。第三行是否应该改为
workips=“ip1 ip2”?实际上,您可能需要转义这些引号:
workerips=\“ip1ip2\”。您可能还需要将每个
$
转义到
\$
,以便在远程计算机上而不是本地对其进行解释。感谢将$转义到\$修复了它。我已经有了代码中带转义引号的第三行,但问题中没有包含。谢谢,但我想在自动脚本中运行它,而不是在交互式会话中运行它。在脚本中可以很好地使用heredocs。事实上,我显示了一个交互式会话并没有改变任何事情。只需删除提示符的前两列。您知道为什么“for”循环在herdoc内不起作用吗:>~/uniquefile$i>~/uniquefile i=$((i+1))完成for循环外的EOF命令正在起作用。谢谢,但我想在自动脚本中运行它,而不是在交互式会话中运行。您可以在脚本中很好地使用herdocs。事实上,我显示了一个交互式会话并没有改变任何事情。只需删除提示符的前两列。您知道为什么“for”循环在herdoc内不起作用吗:>~/uniquefile$i>~/uniquefile i=$((i+1))完成for循环外的EOF命令正在起作用。