Blisko, ale nie do końca.
Niezależnie od dowolnego terminala
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Musisz zamknąć wszystkie deskryptory plików, które są podłączone do gniazda ssh, ponieważ sesja ssh nie zostanie zamknięta, dopóki jakiś zdalny proces ma otwarte gniazdo. Jeśli nie interesuje Cię wyjście skryptu (przypuszczalnie dlatego, że sam skrypt zajmuje się zapisywaniem do pliku dziennika), przekieruj go na /dev/null
(ale pamiętaj, że to ukryje błędy, takie jak niemożność uruchomienia skryptu).
Używanie nohup
nie ma tutaj żadnego użytecznego efektu. nohup
organizuje, że program działa tak, aby nie odbierać sygnału HUP, jeśli terminal kontrolny programu zniknie, ale tutaj nie ma terminala, więc nic nie wyśle SIGHUP do procesu nieoczekiwanie. Ponadto nohup
przekierowuje standardowe wyjście i standardowy błąd (ale nie standardowe wejście) do pliku, ale tylko wtedy, gdy są one podłączone do terminala, co też nie jest.
Odłączanie od terminala
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
Służy nohup
do odłączania skryptu od terminala sterującego, aby nie otrzymywał POWIĘKSZENIA, gdy terminal zniknie. nohup
przekierowuje również standardowe wyjście skryptu i standardowy błąd do pliku wywoływanego, nohup.out
jeśli jest on podłączony do terminala; musisz sam zadbać o standardowe wejście.
Prowadzenie zdalnego terminala
Jeśli chcesz, aby polecenie działało w zdalnym terminalu, ale nie było dołączone do sesji SSH, uruchom je w multiplekserze terminali, takim jak Screen lub Tmux .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Możesz później ponownie połączyć się z terminalem, na którym działa skrypt, wywołując screen -S backup -rd
jako root na tym komputerze.
Automatyzacja jednego zdalnego polecenia
Dla nieco lepszego bezpieczeństwa nie otwieraj zbyt często bezpośrednich zdalnych loginów root. Utwórz parę kluczy specjalnego przeznaczenia i wprowadź do niej wymuszone polecenie /root/.ssh/authorized_keys
. Zawartość pliku klucza publicznego to AAAA…== wibble@example.com
; dodaj listę opcji oddzieloną przecinkami, w tym command="…"
która określa, że klucza można użyć tylko do wykonania tego konkretnego polecenia. Pamiętaj, aby zachować wszystkie opcje i klucz w jednym wierszu.
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com