Sono tanti i fattori che possono influenzare negativamente la connessione ssh; dopo tutto stiamo parlando di una connessione cifrata in remoto che avviene tra due host; è sufficiente che uno dei due non sia in grado di "colloquiare" al meglio perchè la connessione fallisca; non solo; ovviamente anche tutto il percorso deve essere aperto, perchè è sufficiente che la porta di comunicazione (di default la 22) sia bloccata in uno dei dispositivi di passaggio (router) tramite firewall perchè la comunicazione non avvenga.

Il  protocollo SSH è suddiviso architetturalmente in 3 differenti layers: Transport Layer Protocol, User Authentication Protocol e Connection Layer Protocol ed ovviamente perchè la connessione avvenga correttamente non ci devono essere problemi in nessuno dei 3; sono quindi molteplici i fattori da tenere in considerazione ed uno dei momenti più "critici" è lo scambio delle chiavi cifrate tra i due host, in quanto entrambi devono essere in grado di riconoscere correttamente le credenziali passate, riconoscendo opportunamente le chiavi.

In questo articolo mi soffermerò in un errore piuttosto comune, ovvero quello del broken pipe; l'errore broken pipe indica in modo molto generico che qualcosa è andato storto nella connessione a livello di network di rete; sono molteplici i fattori che possono determinarlo come ad esempio un firewall non correttamente configurato, un conflitto di indirizzi, o latenze di rete troppo alte; ovviamente, come detto prima affinchè una connessione ssh possa avvenire è necessario che tutte le condizioni di collegamento siano possibili e non siano bloccate per policy aziendali di sicurezza o altri legittimi motivi; talvolta ad esempio sono gli stessi provider che non consentono la connessione ssh, per cui in questo caso c'è ben poco da poter fare, se non provare a contattare direttamente il fornitore del servizio, confidando nella sua "clemenza" (non fatevi grosse illusioni).

Come risolvere il problema

Nel caso la mancata connessione ssh sia imputabile a problemi di time-out possiamo risolvere il problema inserendo nel file config della connessione ssh (~/.ssh/config o /etc/ssh/ssh_config).

TCPKeepAlive yes

ServerAliveInterval 5

Queste istruzioni aumentano la tolleranza di attesa durante il tentativo di connessione consentendo che non si verifichi il time-out.

 

Altre problematiche

Nel mio caso specifico, le istruzioni indicate non risolvevano il problema "broken pipe" perchè la causa era in realtà connessa alla gestione delle chiavi da parte del portafoglio di Gnome della mia distribuzione linux (Arch linux); in questo caso la soluzione è stata aggiungere al file config, l'istruzione IPQoS=throughput per risolvere il problema (guarda l'immagine)

Il mancato login potrebbe essere connesso alla mancata "comprensione" della chiave, magari perchè non generata secondo le modalità e caratteristiche attese dal server; in questo caso si potrebbe tentare una nuova generazione di chiave per fare in modo che venga riconosciuta in modo corretto.