
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 ( sh
im Gegensatz zur Login-Shell des Remote-Benutzers, je nachdem, welche es ist), und Sie können den Code problemlos zur sh
wörtlichen Interpretation übergeben, ohne sich um Anführungszeichen kümmern zu müssen.
(Übrigens möchten Sie kaum -T
jemals verwenden. Vielleicht möchten Sie verwenden -t
, aber nur, um interaktive Anwendungen wie vi
oder eine interaktive Shell auszuführen; Signal 9, normalerweise kann SIGKILL nicht abgefangen werden, es ist besser, Signalnamen statt Zahlen zu verwenden).