Kapat ama tam olarak değil.
Herhangi bir terminalden bağımsız olarak
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Ssh soketine bağlı tüm dosya tanımlayıcılarını kapatmanız gerekir, çünkü ssh oturumu bazı uzak işlemler soket açık olduğu sürece kapanmaz. Komut dosyasının çıktısıyla ilgilenmiyorsanız (muhtemelen komut dosyasının kendisi bir günlük dosyasına yazmaya özen gösterdiğinden dolayı), onu yeniden yönlendirin /dev/null
(ancak komut dosyasının başlatılamaması gibi hataları gizleyeceğini unutmayın).
Kullanmanın nohup
burada hiçbir faydası yoktur. nohup
Programın kontrol terminali kaybolursa, programın HUP sinyali almaması için çalışır, ancak burada ilk etapta terminal yoktur, bu nedenle hiçbir şey mavi olmayan sürece bir SIGHUP göndermez. Ayrıca, nohup
standart çıktıyı ve standart hatayı (ancak standart girdiyi) bir dosyaya yönlendirir, ancak yalnızca bir terminale bağlılarsa, ki bunlar tekrar değil.
Terminalden ayırma
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$
nohup
Komut dosyasını kontrol terminalinden ayırmak için kullanın , böylece terminal kaybolduğunda SIGHUP alamaz . nohup
Ayrıca betiğin standart çıktısını ve standart hatasını nohup.out
, terminale bağlı ise denilen bir dosyaya yönlendirir ; standart girdiyi kendiniz halletmek zorundasınız.
Uzak bir terminal tutmak
Komutun uzak bir terminalde çalışmasını sağlamak ancak SSH oturumuna eklenmesini istemiyorsanız, Ekran veya Tmux gibi bir terminal çoklayıcıda çalıştırın .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Daha sonra komut dosyasını çalıştıran terminale screen -S backup -rd
, o makineye root olarak çağrı yaparak yeniden bağlanabilirsiniz .
Bir uzaktan komutu otomatikleştirme
Biraz daha iyi güvenlik için, doğrudan uzak kök girişlerini çok fazla açmayın. Özel amaçlı bir anahtar çifti oluşturun ve buna zorunlu bir komut verin /root/.ssh/authorized_keys
. Genel anahtar dosyasının içeriği AAAA…== wibble@example.com
; command="…"
Anahtarın yalnızca bu belirli komutu yürütmek için kullanılabileceğini belirten, virgülle ayrılmış seçeneklerin bir listesini ekleyin . Seçenekleri ve anahtarı tek bir satırda tuttuğunuzdan emin olun.
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