GNU/Linux >> Linux Esercitazione >  >> Linux

5 modi per mantenere in esecuzione sessioni e processi SSH remoti dopo la disconnessione

SSH o Secure Shell in parole povere è un modo con cui una persona può accedere in remoto a un altro utente su un altro sistema ma solo nella riga di comando, ovvero in modalità non GUI. In termini più tecnici, quando ssh su un altro utente su un altro sistema ed eseguiamo comandi su quella macchina, in realtà crea uno pseudo-terminale e lo collega alla shell di accesso dell'utente che ha effettuato l'accesso.

Quando ci disconnettiamo dalla sessione o la sessione va in timeout dopo essere rimasta inattiva per un po' di tempo, il SIGHUP il segnale viene inviato allo pseudo-terminale e tutti i lavori che sono stati eseguiti su quel terminale, anche i lavori che hanno i lavori principali avviati sullo pseudo-terminale, vengono inviati anche al segnale SIGHUP e sono costretti a terminare.

Don' t Signorina: 5 pratiche utili per mantenere il server SSH sicuro e protetto

Solo i lavori che sono stati configurati per ignorare questo segnale sono quelli che sopravvivono alla chiusura della sessione. Sui sistemi Linux, possiamo avere molti modi per eseguire questi lavori sul server remoto o su qualsiasi macchina anche dopo il logout dell'utente e la chiusura della sessione.

Comprendi i processi su Linux

Processo normale

I processi normali sono quelli che hanno la durata di una sessione. Vengono avviati durante la sessione come processi in primo piano e terminano in un determinato intervallo di tempo o quando la sessione viene disconnessa. Questi processi hanno il loro proprietario come qualsiasi utente valido del sistema, incluso root.

Processo per gli orfani

I processi orfani sono quelli che inizialmente avevano un genitore che ha creato il processo ma dopo qualche tempo il processo genitore è morto o si è bloccato involontariamente, rendendolo il genitore di quel processo. Tali processi hanno init come loro genitore immediato che attende questi processi fino a quando non muoiono o finiscono.

Processo Demone

Questi sono alcuni processi intenzionalmente orfani, tali processi che vengono lasciati intenzionalmente in esecuzione sul sistema sono definiti daemon o processi intenzionalmente orfani. Di solito sono processi di lunga durata che vengono una volta avviati e quindi staccati da qualsiasi terminale di controllo in modo che possano essere eseguiti in background fino a quando non vengono completati o finiscono per generare un errore. Il genitore di tali processi muore intenzionalmente facendo giustiziare il bambino in background.

Tecniche per mantenere in esecuzione la sessione SSH dopo la disconnessione

Ci possono essere vari modi per lasciare le sessioni ssh in esecuzione dopo la disconnessione, come descritto di seguito:

1. Utilizzo del comando sullo schermo per mantenere in esecuzione le sessioni SSH

schermo è un gestore di finestre di testo per Linux che consente all'utente di gestire più sessioni di terminale contemporaneamente, passare da una sessione all'altra, registrare le sessioni per le sessioni in esecuzione sullo schermo e persino riprendere la sessione in qualsiasi momento desideriamo senza preoccuparsi che la sessione venga disconnessa o terminale chiuso.

le sessioni dello schermo possono essere avviate e quindi staccate dal terminale di controllo lasciandole in esecuzione in background per poi essere riprese in qualsiasi momento e anche in qualsiasi luogo. Devi solo avviare la tua sessione sullo schermo e quando vuoi, staccarlo dallo pseudo-terminale (o dal terminale di controllo) ed effettuare il logout. Quando lo ritieni, puoi accedere nuovamente e riprendere la sessione.

Avvio di una sessione su schermo

Dopo aver digitato 'schermo' comando, sarai in una nuova sessione dello schermo, all'interno di questa sessione puoi creare nuove finestre, attraversare le finestre, bloccare lo schermo e fare molte altre cose che puoi fare su un normale terminale.

$ screen

Una volta avviata la sessione dello schermo, puoi eseguire qualsiasi comando e mantenere la sessione in esecuzione scollegando la sessione.

Staccare uno schermo

Proprio quando vuoi disconnetterti dalla sessione remota, ma vuoi mantenere viva la sessione che hai creato su quella macchina, quello che devi fare è staccare lo schermo dal terminale in modo che non abbia più terminali di controllo. Dopo averlo fatto, puoi uscire in sicurezza.

Per staccare uno schermo dal terminale remoto, basta premere “Ctrl+a” immediatamente seguito da “d” e tornerai al terminale vedendo il messaggio che lo schermo è staccato. Ora puoi uscire in sicurezza e la tua sessione sarà lasciata in vita.

Ripresa della sessione dello schermo separato

Se vuoi riprendere una sessione di schermo staccata che hai lasciato prima di disconnetterti, accedi nuovamente al terminale remoto e digita “screen -r” nel caso in cui sia aperta una sola schermata e se vengono aperte più sessioni di schermate, eseguire “screen -r <pid.tty.host>” .

$ screen -r
$ screen -r <pid.tty.host>

Per saperne di più sul comando schermo e su come usarlo, basta seguire il collegamento:Usa comando schermo per gestire le sessioni del terminale Linux

2. Utilizzo di Tmux (terminal multiplexer) per mantenere in esecuzione le sessioni SSH

Tmux è un altro software creato per sostituire lo schermo . Ha la maggior parte delle capacità di schermo , con poche funzionalità aggiuntive che lo rendono più potente dello schermo.

Consente, oltre a tutte le opzioni offerte dallo schermo, la divisione dei riquadri orizzontalmente o verticalmente tra più finestre, il ridimensionamento dei riquadri delle finestre, il monitoraggio dell'attività della sessione, lo scripting utilizzando la modalità riga di comando, ecc. A causa di queste funzionalità di tmux, è stato ampiamente adottato da quasi tutte le distribuzioni Unix e persino è stato incluso nel sistema di base di OpenBSD.

Avvia una sessione Tmux

Dopo aver eseguito ssh sull'host remoto e digitato tmux , entrerai in una nuova sessione con una nuova finestra che si apre davanti a te, in cui potrai fare qualsiasi cosa tu faccia su un normale terminale.

$ tmux

Dopo aver eseguito le tue operazioni sul terminale, puoi scollegare quella sessione dal terminale di controllo in modo che vada in background e puoi uscire in sicurezza.

Stacca la sessione Tmux dal terminale

Puoi eseguire “tmux detach” durante l'esecuzione della sessione tmux oppure puoi usare la scorciatoia (Ctrl+b then d) . Dopodiché la tua sessione corrente verrà disconnessa e tornerai al tuo terminale da dove potrai disconnetterti in sicurezza.

$ tmux detach
Ripresa della sessione Tmux chiusa

Per riaprire la sessione che hai disconnesso e lasciato così com'era quando ti sei disconnesso dal sistema, accedi nuovamente alla macchina remota e digita "tmux attach" per ricollegarsi alla sessione chiusa e sarà ancora lì e funzionante.

$ tmux attach

Per saperne di più su tmux e su come usarlo, segui il link:Usa Tmux Terminal Multiplexer per gestire più terminali Linux.

3. Utilizzo del comando nohup per continuare a eseguire sessioni SSH

Se non hai molta dimestichezza con lo schermo o tmux , puoi usare nohup e invia il tuo comando di lunga durata in background in modo da poter continuare mentre il comando continuerà a essere eseguito in background. Dopodiché puoi disconnetterti in sicurezza.

Con il comando nohup diciamo al processo di ignorare il SIGHUP segnale che viene inviato dalla sessione ssh al termine, rendendo così il comando persistente anche dopo il logout della sessione. Al logout della sessione il comando viene rimosso dal terminale di controllo e continua a essere eseguito in background come processo demone.

Esecuzione del comando utilizzando nohup in background

Ecco un semplice scenario in cui abbiamo eseguito il comando find per cercare i file in background nella sessione ssh usando nohup, dopodiché l'attività è stata inviata in background con prompt che è tornato immediatamente fornendo PID e ID del lavoro del processo ([JOBID] PID) .

# nohup find / -type f $gt; files_in_system.out 2>1 &
Ripresa della sessione per vedere se il lavoro è ancora in esecuzione

Quando esegui nuovamente il login, puoi controllare lo stato del comando, riportarlo in primo piano usando 'fg %JOBID' per monitorarne l'andamento e così via. Di seguito, l'output mostra che il lavoro è stato completato poiché non viene visualizzato al nuovo accesso e ha fornito l'output che viene visualizzato.

# fg %JOBID

4. Utilizzo del comando disconoscimento per mantenere in esecuzione le sessioni SSH

Un altro modo elegante per far eseguire il tuo comando o una singola attività in background e rimanere attivo anche dopo il logout o la disconnessione della sessione consiste nell'usare Disown .

Rifiuto , rimuove il processo dall'elenco dei processi del sistema, in modo che il processo non venga interrotto durante la disconnessione della sessione poiché non riceverà SIGHUP dalla shell quando esci.

Lo svantaggio di questo metodo è che dovrebbe essere utilizzato solo per i lavori che non richiedono alcun input da stdin e nessuno dei due ha bisogno di scrivere a stdout , a meno che tu non reindirizzi specificamente l'input e l'output dei lavori, perché quando il lavoro tenterà di interagire con stdin o stdout , si fermerà.

Esecuzione del comando utilizzando disown in background

Di seguito, abbiamo inviato ping comando in background in modo che ut continui a funzionare e venga rimosso dall'elenco dei lavori. Come visto, il lavoro è stato prima sospeso, dopodiché era ancora nell'elenco dei lavori come ID processo:15368 .

$ ping tecmint.com > pingout &
$ jobs -l
$ disown -h %1
$ ps -ef | grep ping

Dopo che il segnale di disconoscimento è stato passato al lavoro ed è stato rimosso dall'elenco dei lavori, sebbene fosse ancora in esecuzione in background. Il lavoro sarebbe ancora in esecuzione quando accedi nuovamente al server remoto come mostrato di seguito.

$ ps -ef | grep ping

5. Utilizzo del comando setid per mettere in esecuzione sessioni SSH

Un'altra utilità per ottenere il comportamento richiesto è setsid . Nessun problema ha uno svantaggio nel senso che il gruppo di processi del processo rimane lo stesso, quindi il processo in esecuzione senza hup è vulnerabile a qualsiasi segnale inviato all'intero gruppo di processi (come Ctrl + C ).

ID set d'altra parte assegna un nuovo gruppo di processi al processo in esecuzione e, quindi, il processo creato è totalmente in un gruppo di processi appena allocato e può essere eseguito in sicurezza senza timore di essere ucciso anche dopo il logout della sessione.

Esegui qualsiasi comando usando setid

Qui mostra che il processo ‘sleep 10m’ è stato staccato dal terminale di controllo, sin dalla sua creazione.

$ setsid sleep 10m
$ ps -ef | grep sleep

Ora, quando riaccedi alla sessione, troverai ancora questo processo in esecuzione.

$ ps -ef | grep [s]leep

Conclusione

A quali modi potresti pensare per mantenere in esecuzione il tuo processo anche dopo esserti disconnesso dalla sessione SSH? Se c'è un altro modo efficiente che ti viene in mente, menzionalo nei tuoi commenti.


Linux
  1. Ssh:come rifiutare un processo in esecuzione e associarlo a una nuova shell dello schermo?

  2. Ssh:come avviare un processo durante una sessione Ssh dopo che la sessione è terminata??

  3. Come visualizzare i processi in esecuzione di qualsiasi utente in SSH?

  4. Mantieni attiva la sessione SSH

  5. Come riconnettersi a una sessione ssh disconnessa

Comando dello schermo Linux:mantieni i processi in esecuzione nonostante una connessione interrotta

Esempi di comandi dello schermo per gestire più sessioni di terminale

Come mantenere le sessioni SSH remote in esecuzione dopo la disconnessione

4 modi per trasferire file tra sistemi remoti e locali su SSH

Un ragazzo Windows in un mondo Linux:VS Code e SSH remoto

avvia automaticamente la schermata all'accesso ssh