通过ssh发送复杂命令

时间:2014-12-12 13:02:25

标签: bash ssh

我试图通过ssh发送此命令:

ssh <user1>@<ip1>  ssh <user2>@<ip2> /opt/user/bin -f /opt/user/slap.conf -l /home/admin/`date +%Y%m%d`_Export_file$nr.gz -s "ou=multi" -a "(& (entry=$nr)(serv=PS))" -o wrap=no

这个命令是自定义的,所以不要混淆这个... 但是它没有被执行,就像:意外的那样(

如果我登录服务器并发出此命令,则会正确执行。所以我认为它应该是括号和括号规则。

有人可以帮助我吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要转义引号,可能需要两次,因为每次调用ssh都会涉及剥离图层。将转义的单引号放在整个命令周围,然后在内部命令周围嵌套未转义的单引号:

ssh <user1>@<ip1>  \'ssh <user2>@<ip2> '/opt/user/bin -f /opt/user/slap.conf -l /home/admin/`date +%Y%m%d`_Export_file$nr.gz -s "ou=multi" -a "(& (entry=$nr)(serv=PS))" -o wrap=no'\'

顺便说一下,这假设您需要解压缩反引号并在ip2上执行命令,而不是事先在源计算机上执行,并且类似于$nr变量的解码。目前尚不清楚如何解释它们。