【问题标题】:Backticks with su -c in SSH Command without running command in it在 SSH 命令中使用 su -c 反引号而不在其中运行命令
【发布时间】:2023-10-23 13:42:01
【问题描述】:

我有一个小问题:

我想用反引号在 Crontab 和多个服务器中回显某些内容。 这是我的示例命令:

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

在远程服务器上显示如下:

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

但我希望这样:

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

我还没有找到答案。也许我只是为了找到一个愚蠢的自动取款机。 有没有人解决这个问题?

问题是:

  • 如果我用单引号运行 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

【问题讨论】:

  • 我猜你需要双重转义 ` 字符,因为它被评估了两次。一次在您的终端上,第二次在远程终端上。
  • 似乎不适合我。 (结果:/bin/hostname instaed of /bin/hostname(没有反引号))
  • 刚刚尝试了您的代码,但我遇到了语法错误。您能否提供没有循环、变量和其他内容的最小示例,这样可以吗?
  • @Jakuje,我在下面编辑了我的帖子。请看一看。

标签: linux ssh su


【解决方案1】:

你应该双重转义

`

这样的角色

\\\`

使用最少代码的示例:

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

【讨论】:

  • 我想我已经尝试过了。非易失性。现在可以了。谢谢:-D
最近更新 更多