Come impedire a SSH di disconnettersi se è rimasto inattivo per un po '


51

Ho una connessione ssh a una macchina che viene disconnessa da quella macchina dopo 30 minuti di inattività dell'utente. Tuttavia, se inizio qualcosa del genere top, la connessione rimane attiva. Poiché si tratta di una macchina client, non è possibile riconfigurare il server SSH della macchina. Quindi sto cercando un modo per rilevare automaticamente l'ozio e iniziare qualcosa di simile top. Una specie di "salvaschermo" per Bash.

So che posso farlo con screen, ma purtroppo screennon è installato e non riesco a installare il software. Quindi ho bisogno di usare ciò che offre Bash.

Per chiarire: sto cercando una soluzione che inizio una volta dopo il login, e poi voglio usare quel terminale, andare via, tornare due ore dopo e continuare a lavorare, senza digitare nulla prima di andare via. Inoltre, non sto cercando di fare tunnel (per questo consiglio l'ottimo sshuttle dello strumento )

Qualche idea?


Solo una breve nota per rendere chiaro lo schermo e Keepalive non sono la stessa cosa: ad esempio, se il client ssh o il server gest sono disconnessi, la sessione ssh verrà chiusa anche se hai KeepAlive attivo, mentre una shell dello schermo non verrebbe terminata .
MariusMatutiae,

Risposte:


78

Per chiarire: sto cercando una soluzione che inizio una volta dopo il login, e poi voglio usare quel terminale, andare via, tornare due ore dopo e continuare a lavorare, senza digitare nulla prima di andare via.

Il problema è che c'è qualcosa (di solito un firewall o un bilanciamento del carico) che sta facendo cadere sessioni inattive. Se si configurano keepalive di sessione, keepalive impedirà ai dispositivi di rete di considerare la sessione come inattiva.

Correzione OpenSSH Linux / Unix / Cygwin :
la correzione più semplice è abilitare keepalive client ssh; questo esempio invierà un keepshive ssh ogni 60 secondi:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Se vuoi abilitarlo in tutte le tue sessioni, inseriscilo nel tuo /etc/ssh/ssh_configo ~/.ssh/config:

ServerAliveInterval 60

Per ulteriori informazioni, consultare la ssh_configmanpage

Putty Fix :

Salvalo su "Impostazioni predefinite" PuTTY ...

  • Fai clic su Connessione
  • Digita 60 in "Secondi tra keepalive"

putty_screenshot


21

Oltre alla risposta di Mike Pennigton , vorrei farti conoscere ServerAliveCountMaxanche tu .

  • Il ServerAliveIntervalinvierà un keepalive ogni x secondi (di default è 0 , che disabilita questa funzione se non impostato a qualcos'altro).
  • Questo verrà fatto ServerAliveCountMaxvolte se non si riceve risposta. Il valore predefinito ServerAliveCountMaxè 3 (consultare la pagina man ssh_config ).

Esempio: se si imposta ServerAliveIntervalsu 60 e si esce ServerAliveCountMaxcosì com'è, significa che keepalive attenderà solo 3 * 60 = 180 seconds = 3 minuti prima di uscire.

Per aumentare questo ad esempio 2 ore di tentativi di mantenere attiva la connessione, puoi fare:

Per comando:

Pertanto dovresti considerare di impostare

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Persistente:

Per renderlo persistente, scriverlo su /etc/ssh/ssh_config(verrà applicato a livello di sistema) o ~/.ssh/config(verrà applicato solo all'utente):

ServerAliveInterval 60
ServerAliveCountMax 120

Nota

Come sottolineato correttamente da Dislick , questo potrebbe non essere quello che desideri, a seconda della situazione:

  • Se desideri terminare rapidamente la sessione non appena il server non risponde più, devi scegliere un valore basso per ServerAliveCountMax.
  • Se sei più interessato a mantenere una connessione già stabilita (ad esempio, vai in treno e hai una latenza elevata), dovresti scegliere un valore più elevato per ServerAliveCountMaxconsentire sshdi continuare a provare a ristabilire la connessione.

Guarda anche:


1
Mi dispiace, ma questo è sbagliato. ServerAliveCountMaxspecifica la quantità di messaggi attivi del server che possono essere inviati senza ricevere alcun messaggio dal server. Se vuoi sshuscire dopo che si è bloccato (in modo da poterlo riavviare) dovresti effettivamente impostare ServerAliveCountMaxun numero basso . Vedi la manpage OP collegata.
clic su

@dislick Ho dovuto pensarci un po ', ma penso che tu abbia ragione a seconda del contesto, quindi ho aggiunto una nota per enfatizzare il contesto.
Murmel,

2

Sto usando Mobaxterm e ho anche riscontrato questo problema. Mobaxterm viene inoltre fornito con un'opzione per mantenere in vita il client quando il client è inattivo. Vai a Settings -> Configuration -> SSH. C'è una sezione intitolata SSH settings, seleziona l'opzione SSH keepalive. Quindi il problema dovrebbe scomparire.

inserisci qui la descrizione dell'immagine


funziona "SSH keepalive" in edizione gratuita ... la mia sessione viene disconnessa anche dopo aver controllato questa opzione
samshers

Sì funziona. Il problema potrebbe avere altre cause.
jdhao,
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.