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!!).
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!).
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.
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.