Soluzione 1:
Prova a impostare ClientAliveInterval (ad es. 60) e TCPKeepAlive (yes o no) su valori appropriati sul lato server sshd.conf .
Questo dovrebbe mantenere viva la tua sessione anche se la connessione si perde per minuti.
Soluzione 2:
AGGIORNAMENTO:per una risposta effettiva, vedere la risposta di zero_r di seguito
Questa non è una risposta, ma una soluzione alternativa. Usa lo schermo.
Quando accedi per la prima volta, esegui screen. Ottieni un'altra shell, esegui i comandi in quella. Se sei disconnesso, il processo dello schermo mantiene attivo il terminale in modo che la tua shell e i processi che sta eseguendo non cadano. Quando ti riconnetti, esegui 'screen -r' per riprendere.
C'è molto di più nella configurazione e nell'utilizzo dello schermo, ma quanto sopra dovrebbe risolvere il tuo problema.
Soluzione 3:
Come accennato in precedenza, GNU Screen è la strada da percorrere. Ti consentirà di avere una "sessione dello schermo" sulla casella remota in cui puoi eseguire più comandi, tramite più "finestre dello schermo". Questo si scollegherà semplicemente se la tua connessione SSH principale si interrompe, mantenendo attivi e funzionanti tutti i sottoprocessi in esecuzione al suo interno.
'man screen
' è tuo amico come al solito, e il pacchetto del sistema operativo dovrebbe chiamarsi 'screen
' se non è installato per impostazione predefinita.
Le basi sono:
-
Avvia una sessione dello schermo (sul tuo host remoto):
$ screen
-
Disconnettiti dalla sessione dello schermo:CTRL-A , d
-
Riconnettiti alla sessione dello schermo dopo aver effettuato nuovamente l'accesso:
$ screen -d -r
-
Apri un'altra 'finestra' dello schermo:CTRL-A , c
-
Scorri le finestre dello schermo aperte:CTRL-A , spazio
C'è un sacco di cose interessanti che puoi fare con Screen. Lo uso da oltre 10 anni e sto ancora scoprendo nuove funzionalità. È la mia utility Unix preferita.
Soluzione 4:
Non posso credere che nessuno abbia menzionato MOSH;
Mosh è un protocollo separato che può agganciarsi al processo di accesso SSH, mantiene viva la tua sessione dopo giorni di disconnessione, cambio di IP, alta latenza e così via. È spiegato sulla home page meglio di quanto io possa spiegarlo, quindi ho copiato la descrizione qui sotto. Le mie esperienze e consigli sono che lo uso sul mio cellulare Android, è un salvavita quando viaggio e SSH. Lo stesso vale per il mio laptop, ad esempio quando è collegato al cellulare sul treno. Consiglio di compilare dal sorgente per ottenere l'ultima versione, la versione repo per me all'interno di Ubuntu ha alcuni fastidi che sono stati risolti nella versione più recente (al momento della scrittura).
Mosh (mobile shell)
Applicazione per terminale remoto che consente il roaming, supporta la connettività intermittente e fornisce un'eco locale intelligente e la modifica della riga dei tasti premuti dall'utente.
Mosh è un sostituto di SSH. È più robusto e reattivo, soprattutto su collegamenti Wi-Fi, cellulari e a lunga distanza.
Mosh è un software gratuito, disponibile per GNU/Linux, FreeBSD, Solaris, MacOS X e Android.
Funzionalità dal sito web:
-
Cambia IP. Rimani connesso :Mosh esegue automaticamente il roaming mentre ti sposti tra le connessioni Internet. Usa il Wi-Fi sul treno, l'Ethernet in un hotel e l'LTE in spiaggia:rimarrai connesso. La maggior parte dei programmi di rete perde la connessione dopo il roaming, inclusi SSH e app Web come Gmail. Mosh è diverso.
-
Fai sogni d'oro :Con Mosh, puoi mettere il tuo laptop in stato di stop e riattivarlo più tardi, mantenendo intatta la tua connessione. Se la tua connessione a Internet si interrompe, Mosh ti avviserà, ma la connessione riprende quando il servizio di rete viene ripristinato.
-
Elimina il ritardo di rete :SSH attende la risposta del server prima di mostrarti la tua digitazione. Ciò può creare un'interfaccia utente scadente. Mosh è diverso:dà una risposta immediata alla digitazione, all'eliminazione e alla modifica della riga. Lo fa in modo adattivo e funziona anche in programmi a schermo intero come emacs e vim. In caso di cattiva connessione, le previsioni in sospeso vengono sottolineate in modo da non essere ingannato.
-
Nessun codice privilegiato. Nessun demone :Non è necessario essere il superutente per installare o eseguire Mosh. Il client e il server sono eseguibili eseguiti da un utente ordinario e durano solo per la durata della connessione.
-
Stesso metodo di accesso :Mosh non ascolta sulle porte di rete né autentica gli utenti. Il client mosh accede al server tramite SSH e gli utenti presentano le stesse credenziali (ad es. password, chiave pubblica) di prima. Quindi Mosh esegue il server mosh in remoto e si connette ad esso tramite UDP.
-
Funziona all'interno del tuo terminale, ma meglio :Mosh è un programma a riga di comando, come ssh. Puoi usarlo all'interno di xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen o tmux. Ma mosh è stato progettato da zero e supporta un solo set di caratteri:UTF-8. Corregge bug Unicode in altri terminali e in SSH.
-
Control-C funziona alla grande :A differenza di SSH, il protocollo basato su UDP di mosh gestisce la perdita di pacchetti con garbo e imposta il framerate in base alle condizioni della rete. Mosh non riempie i buffer di rete, quindi Control-C
funziona sempre per fermare un processo in fuga.
Soluzione 5:
autossh controlla la tua connessione e se si interrompe, si riconnette. È più affidabile di keepalive. Se ti connetti a una sessione dello schermo, continuerai dal punto in cui ti sei disconnesso (vedi rscreen
fornito con autossh)