wie man ein Programm mit root-Rechten auf einem entfernten Linux-Host ausführt

1

Ich möchte ein Programm auf vielen Remote-Hosts ausführen. Dieses Programm kann mehrere Stunden lang ausgeführt werden. Es benötigt Root-Rechte. Ich habe das Programm auf diese Remote-Hosts hochgeladen. Ich kann nur mit meinem Benutzernamen auf diese Computer zugreifen, aber mit meinem Benutzernamen kann ich sudoohne Passwort

Jetzt möchte ich ein Automatisierungsskript schreiben, um sie auf diesen Hosts auszuführen

im grunde brauche ich sowas wie:

for remote_host in host_list:
     run the program on remote_host

und dann wird das Skript beendet. Ich habe es versucht

ssh -t usr@remote_host "sudo /home/usr/program"

Aber dies wird meine Shell blockieren, bis das Programm beendet wird, also habe ich es versucht

ssh -t usr@remote_host "sudo /home/usr/program" &

Es funktioniert nicht, ich benutze es ps -ef, um zu überprüfen und keinen Prozess zu finden

Ich habe auch Python ausprobiert paramiko, aber https://stackoverflow.com/questions/16085502/run-remote-program-with-root-privilegedge-using-paramiko-ssh-channel ist fehlgeschlagen

Ich möchte auch die gesamte Ausgabe vom Ausführen des Programms protokollieren

kann mir jemand einige lösungen geben? Vielen Dank

misteryes
quelle

Antworten:

4

Versuchen:

ssh -t usr@remote_host 'sudo nohup bash -c "/home/user/program > /dev/null 2>&1 &"'

Das nohupsollte ermöglichen, dass Ihre Shell beendet wird, ohne dass das von Ihnen ausgeführte Programm beendet wird. Löschen Sie die -tOption, wenn die nohup.outDatei nicht erstellt werden soll.

Jonathan Ben-Avraham
quelle
1
Warum brauchen Sie das " bash -c"? Wäre " sudo nohup /home/user/program …" nicht genauso gut?
Scott
@ Scott: Gute Frage. Es scheint nötig zu sein, um zu verhindern, dass das &mit dem assoziiert wird nohup.
Jonathan Ben-Avraham
Wenn das Programm, das ausgeführt werden soll, tty benötigt, z. B. tcpdump, ist die -tOption erforderlich, auch wenn Sie nicht möchten, dass die nohup.outDatei erstellt wird.
Okwap