SSH o Secure Shell è senza ombra di dubbio uno strumento tuttora fondamentale per l'amministrazione remota di server ma, nonostante sia costantemente aggiornato, in epoca moderna mostra i tutti i limiti di un progetto concepito nei primi anni '90 (equivalente, in informatica, a un era geologica fa!!).

MOSH: SSH mobilità!

Infatti, quando è stato introdotto, connessioni Wi-Fi o "cellulari" non erano affatto comuni e questo sistema si utilizzava principalmente da postazioni fisse con connessioni via cavo. Oggi invece le connessioni wireless sono all'ordine del giorno e questo affidabile protocollo non riesce a gestire bene i piccoli problemi a cui i collegamenti "senza fili" possono essere soggetti. Facciamo alcuni esempi pratici per rendere bene l'idea dei limiti di SSH: pensiamo di lavorare con il nostro portatile connesso all'hotspot del telefono, mentre viaggiamo in treno oppure in albergo con una connessione Wi-Fi non proprio stabile. Sono tutte situazioni che SSH non riesce a gestire; infatti la sessione sicura di SSH si chiude ad ogni cambio di IP o momentanea disconnessione, interrompendo anche il lavoro avviato sul server remoto (se non abbiamo prese le dovuto precauzioni... ) e obbligandoci ad un nuovo login.

MOSH (acronimo di Mobile Shell) nasce proprio con l'idea di assicurare una connessione sicura e criptata al terminale remoto anche in queste situazioni, dove la connessione è instabile o può cambiare rapidamente, ma non intende sostituire del tutto SSH bensì integrarlo. Per utilizzare MOSH infatti, oltre ovviamente a doverlo installare su server e client (è possibile trovare MOSH per praticamente qualsiasi sistema, c'è perfino una estensione per Chrome!!), è necessario aver già configurato SSH sulle macchine interessate, perché la prima autenticazione viene fatta proprio attraverso SSH, secondo il metodo previsto; dopodiché viene avviata una istanza di MOSH sul server (come utente normale, senza permessi di amministratore quindi e senza demoni in ascolto!!) e la connessione cambia canale di comunicazione: invece di utilizzare il protocollo TPC sulla porta 22, avremo una connessione UDP su una porta casuale tra 60000 e 61000 (dovremo quindi ricordarci di configurare l'eventuale firewall di conseguenza!).

» Leggi: SSH con Windows, Linux, Mac: la Guida Definitiva - Come accedere ad un VPS, server cloud AWS/Azure o server aziendale con facilità

» Leggi: [guida] Come configurare la connessione SSH con tunnel, proxy e chiavi diverse: guida al file .ssh/config (con esempi pratici, Windows 10 e Linux)

Una volta che avremo configurato tutto, l'utilizzo di MOSH è molto simile a SSH; per stabile una connessione il comando sarà

mosh utente@server

Se avremo configurato SSH per utilizzare una porta diversa dalla 22 (ad esempio 9122), dovremo indicare a MOSH quale porta utilizzare (se non avremo editato il file config di SSH):

mosh --ssh="ssh -p 9122" utente@server

In modo analogo potremo passare a MOSH qualsiasi altro argomento o opzione di SSH.

Adesso la nostra connessione potrà cambiare o cadere momentaneamente (e in questo caso MOSH ce lo segnalerà con un messaggio in alto sul nostro terminale) ma potremo anche sospendere o ibernare il nostro computer: al ristabilirsi della connessione internet avremo di nuovo la nostra sessione remota attiva così come l'abbiamo lasciata.

MOSH: SSH mobilità!

Anche se MOSH è sicuro, lasciare una connessione sospesa per molto tempo non è comunque una buona idea; possiamo quindi istruire il server MOSH per chiudere le sessioni sospese dopo un certo tempo di inattività, impostando la variabile di sistema, MOSH_SERVER_NETWORK_TMOUT indicando il numero di secondi che il server deve attendere senza comunicare con il client prima di chiudere la sessione.

Ma i vantaggi di MOSH non finiscono qui: utilizzando un sistema di "previsione intelligente" riesce ad essere molto più rapido nella risposta ai comandi impartiti anche con connessioni affette da lag e tenta di uniformare la codifica dei caratteri a UTF-8 in modo da evitare errori dovuti ad una configurazione diversa su server e client o dovuta ad una gestione non corretta dei caratteri da parte dei vari programmi o applicazioni di terminale.