Processo SSH non interrotto sulla macchina remota quando il sistema remoto si disconnette inaspettatamente


8

Ho una domanda a cui non sono stato in grado di trovare una risposta. Ho due computer, entrambi con Ubuntu 12.04. Tengo uno dei miei computer a casa e utilizzo SSH per connettermi ad esso dall'altro computer ("remoto"). Il computer remoto è in grado di connettersi al computer di casa senza problemi. Il computer remoto ha anche SetAliveInterval impostato su 60 in / etc / ssh / ssh_config, in modo che la connessione non muoia se mi allontano dal computer per un momento.

Di tanto in tanto, la mia connessione Internet sul mio computer remoto viene interrotta. Le interruzioni di Internet causano la chiusura del mio tunnel SSH (ovviamente). Quando ripristino la connettività Internet e ricollego al computer di casa utilizzando un nuovo tunnel SSH, tuttavia, riesco a vedere #ps axche il vecchio processo di connessione SSH è ancora in esecuzione. Questo è un problema perché uso una home directory crittografata sul computer di casa, che non consente di ri-crittografare i file fino a quando quella connessione SSH (ora morta) viene interrotta.

C'è un modo per impostare sshd_config sul computer di casa in modo che rilevi automaticamente quando si è interrotta una connessione e la termina?

Risposte:


5

Prova screen o tmux . Sul lato server o su entrambi i lati se ti piace:

sudo apt-get install tmux

Dopo aver effettuato l'accesso, avvia tmux .

tmux

Se la connessione si interrompe, accedere nuovamente tramite ssh e riconnettere la sessione tmux . Per scoprire il numero di sessione:

tmux ls

L'output potrebbe essere qualcosa del genere:

0: 1 windows (creato mar 25 dic 19:20:40 2012)

Connettiti alla sessione numerata tmux in questo modo:

tmux attach -t 0

Quindi sei tornato dove l'hai lasciato. Non dovrai uccidere le sessioni. Aspettano solo la tua prossima visita. Oppure, se vuoi semplicemente uccidere la sessione ...

Sul lato server, vedere le /etc/ssh/sshd_configimpostazioni per ClientAliveInterval e ClientAliveCountMax . ( man 5 ssh_config)

ClientAliveInterval 300
ClientAliveCountMax 0

Una volta modificate le tue preferenze, riavvia il server SSH.

sudo /etc/init.d/ssh restart

I 300 sono secondi (cinque minuti).


Questo e 'esattamente quello che stavo cercando! Inizierò con ClientAliveInterval e sicuramente proverò anche tmux. Grazie!
JL il

1
Una terza opzione oltre a Screen e Tmux è Byobu : sito Web , Wikipedia . Dal sito Web: "È stato originariamente progettato per fornire eleganti miglioramenti allo schermo GNU altrimenti funzionale, semplice e pratico, per la distribuzione del server Ubuntu. Byobu ora include profili migliorati, comode combinazioni di tasti, utilità di configurazione e notifiche di stato del sistema attivabili / disattivabili sia per GNU Screen Window Manager che per il più moderno multiplexer di terminali Tmux, e funziona sulla maggior parte delle distribuzioni Linux, BSD e Mac. "
sierrasdetandil,

1

Potresti provare moshInstalla mosh , un sostituto di SSH basato su SSH. Supporta il roaming e la connettività intermittente, quindi la tua sessione Mosh (SSH) continuerebbe da dove avevi interrotto ogni volta che la tua connessione Internet viene ristabilita dopo un'interruzione.

Dovrai installare Mosh su entrambe le macchine.

Riferimenti:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.