在ssh上远程运行for循环

时间:2020-06-12 23:39:20

标签: bash ssh

团队,下面有ssh登录并保持连接状态的电线。我想在for循环中运行一些命令,但遇到一些语法错误。当我手动登录到节点和sudo bash并仅复制粘贴时,相同的确切命令有效。

代码

read -p "specify just the list of nodes " nodes


for node in $nodes
do
        ssh -q -F $HOME/.ssh/ssh_config -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -t $node.team.net \
        "for line in `docker ps | grep test | awk '{print $1}'`;
          do
              POD_ID=$(docker inspect $line --format='{{ index .Config.Labels "io.kubernetes.pod.uid" }}')
              POD_NAME=$(docker inspect $line --format='{{ index .Config.Labels "io.kubernetes.pod.name"}}')
              POD_VOL="/var/lib/kubelet/pods/$POD_ID/volumes"
              POD_DU=$(du -sh  $POD_VOL < /dev/null)
              HOSTNAME=$(hostname)
              AGENT_SHA=$(docker inspect $line --format='{{ index .Config.Image }}' | cut -d ':' -f2)
              STARTED_AT=$(docker inspect $line --format='{{ .State.StartedAt }}')
              echo $HOSTNAME, $POD_NAME, $POD_DU, $AGENT_SHA, $STARTED_AT
          done"
        printf "\n"
done;

输出


Your new SSH certificate is ready for use!
specify just the list of nodes node1
"docker inspect" requires at least 1 argument.
See 'docker inspect --help'.

Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Return low-level information on Docker objects
"docker inspect" requires at least 1 argument.
See 'docker inspect --help'.

预期

container1 45GB
..
..

1 个答案:

答案 0 :(得分:1)

最好发送包含脚本内容的文件并运行。像这样:

复制脚本

for a in {server1,server2,serverN}; 
do 
    scp your_script.sh root@$a:/path/to/your_script.sh 
done

执行脚本

for a in {server1,server2,serverN}; 
do 
    ssh root@$a "sh /path/to/your_script.sh par1 par2 parn"; 
done