
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í sh
a 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 sh
interprete palabra por palabra sin tener que preocuparse por las comillas.
(Por cierto, difícilmente querrás usarlo -T
alguna vez. Es posible que quieras usarlo -t
, pero solo para ejecutar aplicaciones interactivas como vi
o 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).