Dopo esserci rifocillati con pastarelle e cibo giapponese, per la categoria “mai più senza” consentitemi nella terza puntata di parlare di qualcosa di tecnico. E sì, lo so che interesserà giusto a 2 nerd, ma questi programmi sono tra quelli che uso di più e trovo più utili, perciò non ne posso non parlare. E magari faccio un favore a qualcuno a cui potrebbero essere utili e che non li ha ancora scoperti. Per me sono state scoperte fortuite e mi hanno nettamente migliorato la vita. Anzi, rinnovo l’invito di segnalarmi altri prodotti/cose/posti/persone che conoscete, così al pizzico di fortuna ci aggiungiamo un po’ di metodicità!
Ssh
Cominciamo da un grande classico: ssh. Ovvero “secure shell”. È il classico programma che chi ne ha bisogno di sicuro già conosce, e chi non ne ha bisogno ignora felicemente (e può continuare ad ignorare). Giusto per i non-nerd che fossero curiosi, spiego brevemente che è un programma che permette di connettersi da remoto ad un altro computer tramite un canale criptato, e aprire una “shell” (vi ricordate il dos?) tramite cui inviare comandi e ricevere l’output (rigorosamente testuale). Chi amministra sistemi sa che è una manna dal cielo, a tutti gli altri di sicuro non frega nulla.
Ma il bello di Ssh è che ha moltissime altre funzionalità. Ad esempio una cosa di cui non potrei assolutamente fare a meno sono i tunnel. Ciò permette ad es. di avere programmi su un server in ascolto su porte locali (o dietro a un firewall), a cui possiamo accedere solo noi che abbiamo la password amministrativa, creando appunto un tunnel cifrato. Ssh aprirà una porta sul mio pc, alla quale potrò connettermi in locale e che invierà dati, su canale protetto, alla porta sul pc remoto (ad es. per connettermi a una istanza di MySql o Postgre). Ma il bello dei tunnel è che sono incredibilmente versatili. Ad es. posso chiedere a ssh di connettermi anche ad un computer diverso dal server, utile per esempio per accedere a risorse dentro a una LAN (stampare sulla stampante dell’ufficio seduti comodamente sul divano di casa? si può! vedere in tutta sicurezza le immagini di una videocamera di sorveglianza remota? si può!), e posso rendere visibile la porta locale anche agli altri pc nella rete in cui mi trovo io. Ma posso anche creare dei tunnel al rovescio, per consentire al computer remoto (o a tutti quelli nella sua LAN) di connettersi a un servizio sul mio pc o su un computer nella rete in cui mi trovo io (far stampare un collega sulla mia stampante di casa? si può!). Si possono addirittura creare tunnel dinamici sfruttando il protocollo Socks, creando quindi un proxy.
Un uso “contorto” che faccio spesso dei tunnel ssh è per connettermi, tramite ssh, a un apparato remoto attraverso un altro tunnel ssh. Chi mi conosce sa che lavoro con robe IoT. Il problema è che l’ip di questi apparati cambia in continuazione e comunque non è pubblico, oltre che protetto da firewall. La soluzione è configurarli in modo che aprano in automatico una connessione ssh a un mio server, con un tunnel al rovescio che connette una porta del mio server al servizio ssh dell’apparato. Quando ho bisogno di connettermi all’apparato, posso allora connettermi alla porta sul mio server, e il tunnel mi farà arrivare al servizio ssh sull’apparato remoto!
Altre caratteristiche degne di nota di ssh sono ad es. la possibilità di autenticarsi con chiave pubblica (anche smart card), invece che con password, così da non dover distribuire la password ai collaboratori, e consentire di revocare l’accesso a una singola persona. La possibilità di trasferire file e addirittura di “montare” localmente un mirror del file system remoto (ne parleremo in futuro). La possibilità di lanciare programmi grafici sul pc remoto e visualizzare l’interfaccia grafica sul pc locale. La possibilità di essere usato anche negli script, per lanciare comandi su un computer remoto e leggerne l’output. E addirittura ssh si può usare anche per creare una vpn.
Ásbrú
L’unica pecca (o una delle poche) di ssh è che è il classico comando da scrivere a mano nella shell, con 200 parametri e opzioni. Se bisogna creare molti tunnel o configurazioni complesse, si rischia di stare a scrivere per mezz’ora. Se occorre usare la stessa connessione spesso (ad es. perché si amministra un server, caso tipico di ssh), può essere noioso dover ogni volta riscrivere tutto. Oltre al fatto che spesso capita di connettersi a più di un server alla volta, e in tal caso occorrerebbe aprire tante diverse shell, una per connessione.
Ci viene allora in aiuto Ásbrú, un programma con una facile interfaccia grafica che ci permette di memorizzare le varie connessioni che usiamo, configurarle facilmente con pochi click (così magari uno non deve ricordarsi tutti i parametri…), e aprirle con un semplice doppio click. Se apro più di una connessione, potrò passare da una all’altra con dei semplici tab.
Ásbrú è insomma l’equivalente per Linux di Putty (ma molto meglio). In realtà è un fork di un altro programma, PAC (Perl Auto Connector), che ho usato per anni, ma che purtroppo non viene più aggiornato. PAC prima e Ásbrú poi mi hanno risparmiato tantissime ore di lavoro. Eterna ed immensa gratitudine.
Byobu
Altro programma dal nome improbabile che mi ha salvato il deretano innumerevoli volte è Byobu, tanto che ormai è tipo la prima cosa che installo su un nuovo server, prima ancora del firewall.
In realtà non è, di suo, nulla di nuovo, visto che offre le stesse funzionalità di screen o tmux (di cui, di fatto, è un’estensione). Però funziona meglio ed è più facile da usare.
Il problema che risolve è molto semplice: se durante una sessione ssh cade la linea mentre ho un programma in esecuzione, il programma viene chiuso (si pensi, ad esempio, se sto facendo delle query al database o sto eseguendo un backup). O, più in generale, non posso interrompere una sessione ssh e tornarci in un secondo momento: devo ripartire da zero.
Con byobu, la shell invece rimane attiva e mi ci posso riconnettere in qualsiasi momento.
Ma byobu fa molto di più! (sigletta) Infatti consente di aprire contemporaneamente più sessioni di shell e passare da una all’altra, così da poter lanciare contemporaneamente più comandi. Inoltre le sessioni di shell possono anche apparire nella stessa schermata, che è possibile perciò dividere in verticale e/o in orizzontale. Il tutto, sia chiaro, in una semplice sessione testuale (sempre il famoso dos, per capirci), quella cioè che si usa normalmente per ssh.
Infine, include anche una comoda barra di stato in cui vengono mostrati vari indicatori di sistema (ad es. temperatura, uso del disco, della rete, della memoria, della cpu, etc), così da avere tutto sotto controllo con un colpo d’occhio.
Autossh
Last but not least, parliamo di un programma cui abbiamo indirettamente accennato già sopra. Autossh, come suggerisce anche il nome, consente di aprire delle connessioni ssh in automatico. Se la connessione cade, il programma la riapre. Gli usi sono vari, a partire da una vpn fai-da-te in cui si vuole essere sicuri ad es. di avere sempre disponibili in locale dei tunnel a dei server remoti senza dover rilanciare in continuazione ssh, al caso sopra citato di un apparato/computer con ip privato che si desidera raggiungere da remoto. La soluzione più semplice, in tal caso, è che sia l’apparato a creare in automatico una connessione ssh verso un server pubblico, e autossh è il programma giusto per assicurarsi che rimanga sempre attiva (ovviamente esistono altre soluzioni più complesse ed eleganti, ma autossh ha di buono di essere semplice e di non aver bisogno di alcun servizio esterno).