在SSH命令中使用su -c反引号而不在其中运行命令

时间:2015-08-28 10:50:19

标签: linux ssh su

我有一个小问题:

我想在Crontab中回复一些带有Backticks的服务器。 继承我的示例命令:

for server in $( cat list ); do ssh -t $user@$server "su -c \"echo '35 * * * * $script_that_runs ''\'\`/bin/hostname\`''\'  $Parameter2 $Parameter3' >> /var/spool/cron/crontabs/root \" "; done

在Remoteserver上显示如下:

35 * * * * $script_that_runs '$hostname'  $Parameter2 $Parameter3

但我想这样:

35 * * * * $script_that_runs `/bin/hostname`  $Parameter2 $Parameter3

我还没找到答案。也许我只是为了找到一个愚蠢的atm。 有没有人为此找到解决方案?

问题是:

  • 如果我用单引号运行su -c,它将不起作用
  • 如果我没有逃避echo命令,实际目录中的每个文件都将在crontab中回显。

具有最佳结果的命令:

for server in $( echo $servername ); do ssh -t $user@$server "su -c \"echo '35 * * * * /usr/lib/nagios/plugins/nsca_wrapper \`\`/bin/hostname\`\`  apt-check /usr/lib/nagios/plugins/check_apt' >> /var/spool/cron/crontabs/root \" "; done

1 个答案:

答案 0 :(得分:2)

你应该双重逃避

`

这样的角色

\\\`

使用最少代码的示例:

 $ ssh -t host "su -c \"echo 'something \\\`/bin/hostname\\\`' > /tmp/test \"; cat /tmp/test ";
 something `/bin/hostname`