Escapar de comillas y apóstrofes mediante la ejecución del comando ssh

Escapar de comillas y apóstrofes mediante la ejecución del comando ssh

Me gustaría ejecutar el siguiente comando a través de ssh:

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

Estoy intentando hacer lo siguiente:

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

Estoy usando el subproceso de Python de la siguiente manera:

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

Pero, obviamente, recibo algunos errores relacionados con comillas y apóstrofes. ¿Alguna opción para evitar este problema?

Respuesta1

Una forma confiable es hacer:

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

Entonces sabrá qué shell obtiene, aquí sha diferencia del shell de inicio de sesión del usuario remoto, cualquiera que sea, y puede pasar fácilmente el código para que lo shinterprete palabra por palabra sin tener que preocuparse por las comillas.

(Por cierto, difícilmente querrás usarlo -Talguna vez. Es posible que quieras usarlo -t, pero solo para ejecutar aplicaciones interactivas como vio un shell interactivo; la señal 9, generalmente SIGKILL, no se puede capturar, es mejor usar nombres de señales en lugar de números).

información relacionada