Escapen von Anführungszeichen und Apostrophen durch die Ausführung von SSH-Befehlen

Escapen von Anführungszeichen und Apostrophen durch die Ausführung von SSH-Befehlen

Ich möchte folgenden Befehl per SSH ausführen:

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

Ich versuche Folgendes vorzugehen:

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

Ich verwende den Python-Unterprozess wie folgt:

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

Aber offensichtlich erhalte ich einige Fehlermeldungen bezüglich Anführungszeichen und Apostrophen. Gibt es eine Möglichkeit, dieses Problem zu vermeiden?

Antwort1

Eine zuverlässige Methode besteht darin:

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

Dann wissen Sie, welche Shell Sie erhalten ( shim Gegensatz zur Login-Shell des Remote-Benutzers, je nachdem, welche es ist), und Sie können den Code problemlos zur shwörtlichen Interpretation übergeben, ohne sich um Anführungszeichen kümmern zu müssen.

(Übrigens möchten Sie kaum -Tjemals verwenden. Vielleicht möchten Sie verwenden -t, aber nur, um interaktive Anwendungen wie vioder eine interaktive Shell auszuführen; Signal 9, normalerweise kann SIGKILL nicht abgefangen werden, es ist besser, Signalnamen statt Zahlen zu verwenden).

verwandte Informationen