jak uruchomić program z uprawnieniami roota na zdalnym hoście linuxowym

1

Chcę uruchomić program na wielu zdalnych hostach programy te mogą działać kilka godzin i wymagają uprawnień roota Wysłałem program do tych hostów zdalnych Mogę tylko ssh do tych maszyn z moją nazwą użytkownika ale z moją nazwą użytkownika mogę sudo bez hasła

teraz chcę napisać skrypt automatyzacji, aby uruchomić je na tych hostach

zasadniczo potrzebuję czegoś takiego:

for remote_host in host_list:
     run the program on remote_host

a następnie skrypt kończy działanie. próbowałem

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

ale to zablokuje moją powłokę, dopóki program nie zakończy pracy więc spróbowałem

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

to nie działa, używam ps -ef sprawdzić i nie znaleźć żadnego procesu

Próbowałem również python paramiko, ale zawiodło https://stackover.com/questions/16085502/run-remote-program-with-root-priviledge-using-paramiko-ssh-channel

Chcę również rejestrować wszystkie dane wyjściowe podczas uruchamiania programu

czy ktoś może podać jakieś rozwiązania? dzięki

misteryes
źródło

Odpowiedzi:

4

Próbować:

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

The nohup powinien pozwolić powłoce na wyjście bez zabijania uruchomionego programu. Upuścić -t opcja, jeśli nie chcesz nohup.out plik do utworzenia.

Jonathan Ben-Avraham
źródło
1
Dlaczego potrzebujesz „ bash -c ”? Nie „ sudo nohup /home/user/program … „Bądź tak dobry?
Scott
@Scott: Dobre pytanie. Wydaje się, że potrzebują go, aby zachować & od kojarzenia z nohup.
Jonathan Ben-Avraham
Jeśli program przeznaczony do uruchomienia potrzebuje tty, np. Tcpdump, the -t opcja jest konieczna, nawet jeśli nie chcesz nohup.out plik do utworzenia.
okwap