Acest tutorial iti ofera o rezolvare foarte buna daca folosesti conexiuni SSH si intampini eroarea: SSH Connection Timing Out / Broken Pipe. Impropriu spus eroare. Este un mesaj care anunta ca a fost inchisa conexiunea dintre calculatorul tau si serverul la care era conectat prin Putty sau Terminal.
Atat ca utilizator de Windows cat si de Mac (in ultimii 10 ani) mi-am petrecut foarte mult timp in conexiuni SSH la web servere, servere de e-mail, cloud si alte balarii de backup. Distributia preferata de Linux este fara indoiala CentOS.
Una dintre chestiile cele mai stresante pentru administratorii de servere este sa se intrerupa conexiunile SSH. Fie subit in timp ce butoneaza in Putty sau Terminal (de cele mai multe ori fiind vorba despre o problema de conexiune locala), fie dupa un timp de “idle” – perioada de timp in care nu interactioneaza cu serverul la distanta prin sesiunea SSH.
Daca sunteti utilizator de Mac si folositi utiliarul Terminal pentru conexiunea la distanta prin SSH, atunci cu siguranta dupa in timp de inactivitate ati fost deconectat cu mesajul:“client_loop: send disconnect: Broken pipe”. Rezolvarea am dat-o in articolul de aici, in care am spus ca se poate adauga in “/etc/ssh/ssh_config
” linia:
Host *
ServerAliveInterval 120
Solutia de mai sus este valabila pentru utilizatorii de Mac, iar sincer sa fiu cele mai recente actualizari ale macOS nu retin dupa restart modificarile facute in fisierul “ssh_config
“, iar problema cu deconectarea unei sesiuni in idle revine.
O solutie prin care putem preveni deconectarea unei sesiuni SSH la distanta stabilita prin Terminal (macOS) sau Putty (Windows), este ca pe langa “ServerAliveInterval
” de pe calculatorul nostru, sa determinam si serverul de la distanta sa comunice periodic cu aplicatia / clientul SSH.
Pentru asta trebuie sa punem directiva “ClientAliveInterval
” in “sshd_config
” pe serverul la care ne conectam.
Prevent SSH Connection Timing Out / Broken Pipe (ssh_config Tips)
1. Ne conectam la serverul pe care dorim sa activam si sa stabilim un interval de timp pentru “ClientAliveInternal“. Deschidem SSH in Putty, Terminal sau alt utilitar asemanator si ne autentificam cu user root
.
ssh root@server.hostname
2. Executam linia de comanda pentru a cauta in fisierul “sshd_config” daca “ClientAliveInterval” este activ si care este perioada de timp setata.
sudo grep "ClientAliveInterval" /etc/ssh/sshd_config
In scenariul nostru “ClientAliveInterval” este dezactivat si valoare intervalului de timp este zero.
[root@buffy ~]# sudo grep "ClientAliveInterval" /etc/ssh/sshd_config
#ClientAliveInterval 0
[root@buffy ~]#
Semnul hashtag “#
” pus in fata unei linii, o anuleaza. Este inctiva.
3. Deschidem cu editor “nano
” sau “vim
” fisierul “sshd_config
“. Eu prefer “nano“.
sudo nano /etc/ssh/sshd_config
4. Stergem “#
” din fata liniei “ClientAliveInterval
” si setam un numar de secunde: 60, 120 …
ClientAliveInterval 120
ClientAliveCountMax 10
5. Salvam modificarile si restartam serviciul “sshd
“.
sudo systemctl restart sshd
ClientAliveInterval
: Este intervalul de timp in secunde la care serverul ca trimite un pachet de date null catre client / aplicatia prin care suntem conectati la server. Aceasta practica va tine conexiunea in viata / activa.
ClientAliveCountMax
: Clientii SSH care nu raspund in 10 cicluri de 120 de secunde (setate de “ClientAliveInterval“) se va intrerupe conexiunea. Adica dupa 20 de minute in care clientul SSH nu a raspuns pachetelor nule trimise de server.
Cu aceste modificari conexiunea SSH va fi mai stabila si ramane la fel de sigura.