通过 ssh 命令执行转义引号和撇号

通过 ssh 命令执行转义引号和撇号

我想通过 ssh 执行以下命令:

echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt

我正在尝试执行以下操作:

ssh 127.0.0.1 -T "echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt"

我使用 python 子进程如下:

command = "echo \"trap '/tmp/test &' 2 9\" >> /tmp/output.txt"
addtrap = 'ssh root@' + rhost + ' -T "' + command + '"'
subprocess.Popen(addtrap, shell=True)

但是,显然,我遇到了一些有关引号和撇号的错误。有什么选择可以避免这个问题?

答案1

一种可靠的方法是:

ssh 127.0.0.1 sh << "EOF"
echo "trap '/tmp/test &' INT" >> /tmp/output.txt
EOF

然后你就知道你得到的是什么 shell,这里sh不是远程用户的登录 shell,无论它是什么,你可以轻松地传递代码来sh逐字解释,而不必担心引用。

(顺便说一句,你很难想使用-Tever。你可能想使用-t,但只是为了运行交互式应用程序,例如vi或交互式 shell;信号 9,通常无法捕获 SIGKILL,最好使用信号名称而不是数字)。

相关内容