mac - ssh windows 7




Mantenere attiva la sessione SSH mentre il computer dorme? (4)

È possibile mantenere in vita la sessione SSH mentre il computer dorme? Quando metto il mio Mac (Lion) a dormire per un breve periodo di tempo e poi lo riattivano, la sessione è ancora attiva, ma se la lascio la connessione della sessione notturna è chiusa.

Ho provato a impostare:

ClientAliveInterval 3600
ClientAliveCountMax 10

stesso risultato

Perché la sessione "sopravvive" per un breve periodo di tempo? Come posso controllare questo timeout?


A volte, le sessioni vengono chiuse quando non vengono trasmessi dati. Lasciare htop aperto di solito impedisce la chiusura delle mie connessioni ssh, oltre a fornire utili informazioni in tempo reale.

Keepalive dovrebbe fare la stessa cosa Potresti forse provare a ridurre l'intervallo (il ritardo tra due keepalive) a qualcosa come 60, vedere se cambia qualcosa.


Ho trovato la risposta dipende dalle impostazioni keepalive di tcp:

Per l'elenco delle impostazioni TCP disponibili (FreeBSD 4.8 e versioni successive e 5.4):

sysctl -A | grep net.inet.tcp
  • net.inet.tcp.keepidle - Quantità di tempo, in millisecondi, che la connessione (TCP) deve essere inattiva prima che vengano inviati i probe keepalive (se abilitati).

  • net.inet.tcp.keepintvl - L'intervallo, in millisecondi, tra le sonde keepalive inviate alle macchine remote. Dopo l'invio dei probe TCPTV_KEEPCNT (default 8), senza risposta, la connessione (TCP) viene interrotta.

  • net.inet.tcp.always_keepalive - Supponiamo che SO_KEEPALIVE sia impostato su tutte le connessioni TCP, il kernel invierà periodicamente un pacchetto all'host remoto per verificare che la connessione sia ancora attiva.

Pertanto, la formula per calcolare il tempo massimo di connessione TCP inattivo è la seguente:

net.inet.tcp.keepidle + (net.inet.tcp.keepintvl x 8)

il risultato è in millisecondi. Pertanto, impostando

net.inet.tcp.keepidle = 10000 net.inet.tcp.keepintvl = 5000 net.inet.tcp.always_keepalive = 1 (must be 1 always)

il sistema disconnetterà una chiamata quando la connessione TCP è disattivata per: 10000 + (5000 x 8) = 50000 msec (50 sec). Per fare in modo che il sistema ricordi queste impostazioni all'avvio, dovresti aggiungerle al file /etc/sysctl.conf


Un'altra soluzione è usare autossh , che controlla fondamentalmente la tua sessione ssh e riconnette non appena viene interrotta (ad esempio dopo un ciclo di sonno, ma anche se perdi una connessione WiFi per un po ', per esempio). Funziona particolarmente bene per le porte di inoltro / tunnel ssh.

Ecco un tutorial: http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh .


Un'altra soluzione possibile è mosh , che non è esattamente SSH ma mantiene attiva la connessione alla shell quando il computer va in stop o anche dopo aver cambiato gli indirizzi IP.





timeout