{"id":327,"date":"2020-11-05T13:20:18","date_gmt":"2020-11-05T12:20:18","guid":{"rendered":"http:\/\/www.maidaccordo.net\/blog\/?p=327"},"modified":"2020-11-05T13:50:43","modified_gmt":"2020-11-05T12:50:43","slug":"se-ssh-si-stacca","status":"publish","type":"post","link":"https:\/\/www.maidaccordo.net\/blog\/2020\/11\/se-ssh-si-stacca\/","title":{"rendered":"Se SSH si stacca"},"content":{"rendered":"<p>In tempi di lavoro forzatamente remoto di alcune cose, anche piccole, si sente maggiormente l&#8217;esigenza. E l&#8217;esigenza \u00e8 sempre la molla che spinge verso il miglioramento e la ricerca delle soluzioni.<\/p>\n<p>Premetto che una parte piuttosto importante del lavoro, mio e dei miei colleghi, viene svolgo via SSH sui server che gestisco.<\/p>\n<p>Accade che le sessioni SSH sui miei server si disconnettano in maniera sistematica dopo qualche minuto di connessione se lasciate inattive. Questo bizzarro comportamento si verifica soltanto quando ci si connette da una rete esterna a quella del mio posto di lavoro. Quando ci si connette dalla rete interna dell&#8217;ufficio le connessioni durano giorni.<!--more--><\/p>\n<p>Che accada non \u00e8 una novit\u00e0, succede da anni, e sarebbe un problema di poca rilevanza: in condizioni normali il tempo che ciascuno degli utenti rimane connesso ai server dall&#8217;esterno in genere \u00e8 poco rispetto al tempo totale di lavoro. Questo, onestamente, mi aveva indotto, finora, a considerarlo un inconveniente minore a bassa priorit\u00e0 e in ultima analisi a trascurarlo. Per anni il problema \u00e8 rimasto l\u00ec, fastidioso ma solo un pochino.<\/p>\n<p>Adesso per\u00f2 che siamo tutti costretti a lavorare da casa, una parte molto rilevante del lavoro avviene attraverso connessioni ai server dall&#8217;esterno: noi restiamo a casa.<\/p>\n<p>Ogni volta che un terminale viene lasciato inattivo per qualche minuto, la sessione di interrompe e tocca riloggarsi e riaprire qualsiasi cosa si stesse facendo con il rischio di perdere prezioso lavoro.<\/p>\n<p>Un problema poco importante \u00e8 diventato un problema molto grosso!<\/p>\n<p>Cos\u00ec mi sono messo a messo a indagare.<\/p>\n<p>Il dilemma era questo: il portatile con cui mi connetto da casa ha una configurazione software identica a quella del PC con cui mi connetto in ufficio, perch\u00e9 dall&#8217;ufficio la sessione SSH resta stabile e da casa si stacca?<\/p>\n<p>I due estremi della catena di comunicazione sono virtualmente identici, quindi il problema doveva essere ci\u00f2 che ci sta nel mezzo: la rete tra le due macchine. In realt\u00e0 anche se fondamentalmente avevo ragione, scoprir\u00f2 che parte della responsabilit\u00e0 \u00e0 anche della configurazione del server SSH.<\/p>\n<p>Le parti in cui era pi\u00f9 probabile che si annidasse il problema erano il gateway di ingresso alla rete dell&#8217;ufficio e il router di casa mia. L&#8217;inconveniente per\u00f2 lo hanno pi\u00f9 o meno tutti gli utenti, quindi non pu\u00f2 dipendere dal provider o dal router. A questo punto restava soltanto la rete dell&#8217;ufficio.<\/p>\n<p>La soluzione del busillis, come la maggior parte delle volte, era l\u00ec, nel manuale di SSH, avevo semplicemente mancato di prestare la dovuta attenzione.<\/p>\n<p>Vediamo se riesco a dare una spiegazione semplice di quello che ho capito:<\/p>\n<p>Il server SSH, su debian \u00e8 configurato di default per non inviare nessun segnale di keepalive. Per qualche ragione, che non ho capito, sulla rete locale in qualche modo il server trova il modo di sapere che il client non si \u00e8 disconnesso, o semplicemente si aspetta che il client resti sempre connesso.<\/p>\n<p>Quando si accede dall&#8217;esterno invece, probabilmente tutti i pacchetti inutili vengono eliminati, o forse non si aspetta pi\u00f9 che sia sempre connesso&#8230;<\/p>\n<p>Le soluzioni potrebbero essere 2: una, lato server, \u00e8 quella di attivare l&#8217;opzione TCPKeepAlive con un ClientAliveInterval diverso da zero. Tuttavia, come leggo sul manuale del client SSH, TCPKeepAlive \u00e8 spoofabile (rimando a <a href=\"https:\/\/it.wikipedia.org\/wiki\/Spoofing\">questa<\/a> pagina wikipedia per la spiegazione di cosa significhi); l&#8217;altra, lato client, consiste nel mandare dal client un segnale KeepAlive sul canale criptato, questa sembra essere la soluzione pi\u00f9 efficace e sicura.<\/p>\n<p>Per attivare questo comportamento o si modificano i file di configurazione (i file utente o i file di sistema) di tutti i client SSH o si da l&#8217;opzione da linea di comando. Penso che questa sia la soluzione pi\u00f9 indolore&#8230;<\/p>\n<p>Di seguito ci\u00f2 che si deve fare.<\/p>\n<pre><code class=\"language-bash\">ssh -o \"ServerAliveInterval 240\" -o \"ServerAliveCountMax 120\" PC_remoto<\/code><\/pre>\n<p>Potete impostare un alias:<\/p>\n<p>inserite<\/p>\n<pre><code class=\"language-bash\">alias ssh_='ssh -o \"ServerAliveInterval 240\" -o \"ServerAliveCountMax 120\"'<\/code><\/pre>\n<p>in ~\/.bash_aliases se il vostro file .bashrc contiene una riga come questa<\/p>\n<pre><code class=\"language-bash\">. ~\/.bash_aliases<\/code><\/pre>\n<p>altrimenti direttamente in .bashrc<\/p>\n<p>A questo punto il comando ssh_ si connetter\u00e0 in maniera stabile.<\/p>\n<p>Coloro che volessero invece cambiare il file di configurazione vi rimando al manuale di ssh_config: vanno cambiate le stesse opzioni che sono indicate nella linea di comando.<\/p>\n<p>Per chi ha windows con Cygwin installato, per home si intende quella di Cycwin. Non ho alcuna idea di come si faccia con Putty&#8230;<\/p>\n<p>Magari queste poche righe servono a qualcuno, a me sicuramente da promemoria. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In tempi di lavoro forzatamente remoto di alcune cose, anche piccole, si sente maggiormente l&#8217;esigenza. E l&#8217;esigenza \u00e8 sempre la molla che spinge verso il miglioramento e la ricerca delle soluzioni. Premetto che una parte piuttosto importante del lavoro, mio &hellip; <a href=\"https:\/\/www.maidaccordo.net\/blog\/2020\/11\/se-ssh-si-stacca\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-327","post","type-post","status-publish","format-standard","hentry","category-hardsoft"],"_links":{"self":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts\/327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/comments?post=327"}],"version-history":[{"count":14,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts\/327\/revisions"}],"predecessor-version":[{"id":343,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts\/327\/revisions\/343"}],"wp:attachment":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/media?parent=327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/categories?post=327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/tags?post=327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}