隐藏bash语法错误
我无法在此处找到语法问题:隐藏bash语法错误,bash,ssh,Bash,Ssh,我无法在此处找到语法问题: » ssh bootstrap01 bash -c 'for master in master01 master02 master03 ; do ssh root@$master -i .ssh/master hostname ; done' bash: -c: line 0: syntax error near unexpected token `do' bash: -c: line 0: `bash -c for master in master01 master
» ssh bootstrap01 bash -c 'for master in master01 master02 master03 ; do ssh root@$master -i .ssh/master hostname ; done'
bash: -c: line 0: syntax error near unexpected token `do'
bash: -c: line 0: `bash -c for master in master01 master02 master03 ; do ssh root@$master -i .ssh/master hostname ; done'
编辑
要验证我的联机脚本是否有效,请执行以下操作:
$ for master in localhost localhost localhost ; do ssh $master hostname ; done
myhost.mydomain.net
myhost.mydomain.net
myhost.mydomain.net
实际上,SSH将命令传递到远程端的方式存在问题。比较以下示例:
$ ssh localhost bash -x -c 'echo 1; echo 2; echo 3'
+ echo
2
3
理解这个问题的关键是SSH根据其参数重建命令行,但它做得很糟糕。它只是使用空格将参数粘贴到一起,如果我们使用-v
选项运行上面的两个命令,就可以看到:
bash-c
,因为您的命令中没有标准shell不喜欢的内容:
ssh bootstrap01 'for master in master01 master02 master03 ; do ssh root@$master -i .ssh/master hostname ; done'
您是否考虑过使用
ProxyCommand
转发SSH?@IgnacioVazquez Abrams:谢谢您的想法,但我想了解我的语法问题在哪里bash-c“xxx”
明确地告诉ssh使用bash运行一个内嵌脚本。内联脚本本身是正确的。那么问题出在哪里呢?引用?很好,删除bash-c
解决了这个问题。我以为我是在让事情变得更好,实际上是在让事情变得更糟
debug1: Sending command: bash -x -c echo 1; echo 2; echo 3
debug1: Sending command: bash -x -c 'echo 1; echo 2; echo 3'
bash -x -c "echo" 1
echo 2
echo 3
ssh bootstrap01 'for master in master01 master02 master03 ; do ssh root@$master -i .ssh/master hostname ; done'