ssh指令中断一段时间?

时间:2015-04-22 07:52:54

标签: bash ssh

我正在尝试使用使用yaml文件的脚本部署群集。除了名为“RaftFS”的条目之外,每个yaml条目代表要部署的机器。我不明白为什么如果执行while命令,脚本只执行一个ssh周期(即使命令是一个简单的ls!)但如果我删除它,那么一切都是很好,它的循环次数等于yaml文件中定义的机器数量!

cat RaftFS/servers.yaml | shyaml keys-0 |
  while read -r -d $'\0' value; do
      if [ ! $value == "RaftArgs" ]; then
       address=$(cat RaftFS/servers.yaml | shyaml get-value $value.machineIP | xargs -0 -n 1 echo)
       username=$(cat RaftFS/servers.yaml | shyaml get-value $value.username | xargs -0 -n 1 echo)
       password=$(cat RaftFS/servers.yaml | shyaml get-value $value.password | xargs -0 -n 1 echo)
       #uploading my fingerprint (in order to use pssh)
       echo $address $username $password
       echo "uploading my fingerprint on $username@$address $password"
       sshpass -p $password ssh-copy-id -oStrictHostKeyChecking=no $username@$address
       echo "creating RaftFS"
       ssh $username@$address echo "MACHINE=$value vagrant up">>vagrantscript.sh
      fi
       echo $address $username $password
  done

2 个答案:

答案 0 :(得分:0)

我认为ssh命令没有问题但它是一个分隔符的问题

我与read -r -d $'\0'玩了一点,这些是结果

echo "a\0b\0c" | while read -r  -d $'\0'  var; do echo $var; done

打印

a
b

echo "a\0b\0c\0" | while read -r -d $'\0' var; do echo $var; done 打印

a
b
c

我认为$value == "RaftArgs"

时的结束行存在一些差异

答案 1 :(得分:0)

while循环的标准输入也是while循环中每个命令的标准输入。 ssh从标准输入读取,以便将数据传递给远程命令。它可能正在消耗用于read语句的数据。

您可以重定向ssh命令的输入:

ssh $username@$address ... >>vagrantscript.sh < /dev/null

或者您可以使用&#34; -n&#34;运行ssh。标志,以防止从标准输入读取:

ssh -n $username@$address ... >>vagrantscript.sh