In questo articolo abbiamo raccolto i nostri migliori metodi per un uso più efficace di SSH. Da esso apprenderai come:
- Aggiungere un secondo fattore al login SSH
- Utilizzare in modo sicuro l'agent forwarding
- Uscire da una sessione SSH bloccata
- Mantenere aperto un terminale permanente
- Condividere una sessione terminale remota con un amico (senza Zoom!)
Aggiungere un secondo fattore al proprio SSH
È possibile aggiungere un secondo fattore di autenticazione alle proprie connessioni SSH in cinque modi diversi:
- Aggiornare il proprio OpenSSH e utilizzare una chiave di crittografia. Nel febbraio 2020, OpenSSH ha aggiunto il supporto per le chiavi di crittografia FIDO U2F (Universal Second Factor). Questa è una nuova funzione eccellente, ma c'è un particolare: solo quei client e server che si sono aggiornati alla versione OpenSSH 8.2 o superiore potranno utilizzare le chiavi di crittografia, poiché l'aggiornamento di febbraio introduce nuovi tipi di chiavi per loro. Con il comando
ssh –Vpuoi controllare la versione del client SSH, mentre la versione del server può essere controllata con il comandonc [servername] 22
Nella versione di febbraio sono stati aggiunti due nuovi tipi di chiavi — ecdsa-sk ed ed25519-sk (insieme ai relativi certificati). Per generare un file di chiave, è sufficiente inserire la propria chiave di crittografia e avviare il comando:$ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_skEsso creerà chiavi pubbliche e private e le legherà al tuo dispositivo U2F. Il compito della chiave segreta sul dispositivo U2F è quello di decrittografare il descrittore segreto della chiave sul disco quando la chiave di crittografia è attivata.
Inoltre, come secondo fattore puoi fornire una frase segreta per le tue chiavi.
La chiave residente è un altro tipo di generazione di chiavi -sk- supportato da OpenSSH. Con questo approccio, il descrittore viene memorizzato sul dispositivo U2F e ti consente di averlo con la chiave di crittografia quando ne hai bisogno. Puoi creare una chiave residente con il comando:
$ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_skSuccessivamente, per restituire il descrittore in memoria su un nuovo dispositivo, inserisci la chiave di crittografia e avvia il comando:
$ ssh-add -KQuando ti connetti a un host dovrai comunque attivare la chiave di crittografia.
- Utilizzare PIV+PKCS11 e Yubikey. Per connettersi a dispositivi con versioni precedenti di SSHD utilizzando una chiave di crittografia è necessario un approccio diverso. Su Yubico c'è una guida su come utilizzare U2F+SSH con PIV/PKCS11 (in inglese). Non è la stessa cosa di FIDO U2F e, sebbene il metodo funzioni, richiede molto impegno per capire quale magia lo muove.
- Applicare un agente ssh yubikey-agent personalizzato. Filippo Valsorda ha scritto un agente SSH per Yubikeys. È completamente nuovo e contiene un numero minimo di funzioni.
- Utilizzare il Touch ID e sekey. Sekey è un agente SSH open-source che memorizza le chiavi segrete in un enclave protetta del Mac e consente di utilizzare il Touch ID per la funzione di accesso.
- Utilizzare il Single Sign On SSH. Ho scritto un tutorial per aiutare nella configurazione di questo metodo (in inglese). Uno dei vantaggi del single sign on SSH è la possibilità di applicare le politiche di sicurezza del tuo fornitore di identità, inclusa la supporto dell'autenticazione multi-fattoriale (MFA).
Utilizzo sicuro del forwarding dell'agente
In SSH, il forwarding dell'agente consente a un nodo remoto di accedere all'agente SSH del tuo dispositivo locale. Quando utilizzi SSH con il forwarding dell'agente attivato (normalmente tramite ssh -A), ci saranno due canali nella connessione: la tua sessione interattiva e il canale per il forwarding dell'agente. Tramite questo canale, il socket Unix creato dal tuo agente SSH locale si collega al nodo remoto. Questo metodo è rischioso, poiché un utente con accesso root sul dispositivo remoto può accedere al tuo agente SSH locale e potenzialmente impersonarti in rete. Utilizzando l'agente SSH standard del pacchetto Open SSH, non saprai nemmeno che è successo. Avere una chiave U2F (o Sekey) ti aiuterà a bloccare efficacemente qualsiasi tentativo di accesso al tuo agente SSH da fonti esterne.
Anche con questa misura di precauzione, sarà una buona idea utilizzare il forwarding dell'agente il meno possibile. Non dovresti usarlo in ogni sessione: utilizza il forwarding dell'agente solo quando sei sicuro della sua necessità per la sessione corrente.
Uscita da una sessione bloccata
Interruzione della rete, comportamento incontrollato dei programmi o una sequenza di comandi che blocca l'input da tastiera sono tutte possibili cause della disconnessione di una sessione SSH.
È possibile terminare una sessione bloccata in diversi modi:
- Uscire automaticamente in caso di interruzione della rete. Devi aggiungere quanto segue al tuo .ssh/config:
ServerAliveInterval 5 ServerAliveCountMax 1ssh invierà un'eco al nodo remoto ogni ServerAliveInterval secondi per verificare la connessione. Se più di ServerAliveCountMax eco non ricevono risposta, ssh terminerà la connessione per timeout e uscirà dalla sessione.
- Uscire dalla sessione. ssh di default utilizza il simbolo ~ (tilde) come comando. Il comando ~. chiude la connessione aperta e ti riporta al terminale. (Le sequenze di controllo possono essere immesse solo in una nuova riga.) Il comando ~? mostrerà un elenco completo dei comandi disponibili in questa sessione. Tieni presente che per digitare il simbolo ~ su tastiere internazionali, potrebbe essere necessario premere il tasto ~ due volte.
Perché avvengono sessioni bloccate? Ai tempi della creazione di internet i computer si spostavano raramente. Quando utilizzi laptop e cambi tra diverse reti WiFi IPv4, il tuo indirizzo IP cambia. Poiché l'SSH si basa sulle connessioni TCP, e queste a loro volta si basano su un endpoint con un indirizzo IP stabile, ogni volta che cambi rete, le tue connessioni SSH perdono il descrittore del socket e vengono effettivamente perse. Quando cambia il tuo indirizzo IP, il tuo stack di rete ha bisogno di tempo per rilevare la perdita del descrittore. Quando si verificano problemi di rete, non vogliamo che uno dei nodi nella connessione TCP la interrompa troppo presto. Pertanto, il protocollo cercherà di ritrasmettere i dati ancora un paio di volte prima di arrendersi definitivamente. Nel frattempo, nel tuo terminale la sessione sembrerà bloccata. L'IPv6 aggiunge alcune funzionalità legate alla mobilità che consentono al dispositivo di mantenere l'indirizzo di origine durante il cambio di rete. Forse un giorno questo non sarà più un problema.
Come mantenere un terminale permanente aperto su un nodo remoto
Ci sono due approcci differenti per mantenere la connessione durante il passaggio tra diverse reti o per disconnettersi temporaneamente.
1. Utilizzare o
Se hai davvero bisogno di una connessione che non si interrompa, anche quando cambi rete, utilizza la shell mobile Mosh. È una shell sicura che prima utilizza un handshake SSH e poi passa al proprio canale criptato per l'intera durata della sessione. In questo modo Mosh crea un canale separato, molto resistente e sicuro, capace di sopportare interruzioni della connessione internet, cambi dell'indirizzo IP del tuo laptop, disconnessioni di rete e molto altro, tutto grazie alla magia delle connessioni UDP e al protocollo di sincronizzazione utilizzato da Mosh.
Per usare Mosh, dovrai installarlo sia sul client che sul server, e aprire le porte 60000-61000 per il traffico UDP non connesso verso il tuo host remoto. Successivamente, per connetterti, basterà utilizzare mosh user@server.
Mosh opera a livello di schermi e di tasti premuti, il che gli conferisce una serie di vantaggi rispetto alla trasmissione di un flusso binario standard di input e output tra client e server SSH. Se dobbiamo sincronizzare solo schermi e tasti premuti, il ripristino di una connessione interrotta diventa molto più semplice. Mentre SSH memorizza in buffer e invia tutto ciò che è successo, Mosh deve solo memorizzare in buffer i tasti premuti e sincronizzare l'ultima immagine della finestra del terminale con il client.
2. Usare tmux
Se desideri "andare e venire quando vuoi" e mantenere aperta una sessione terminale su un nodo remoto, utilizza il tmux. Adoro tmux e lo utilizzo costantemente. Se la tua connessione SSH si interrompe, per tornare alla tua sessione tmux basta riconnettersi e digitare tmux attach. Inoltre, offre funzioni meravigliose come le schede e i pannelli interni, simili alle schede nel terminale iOS, e la possibilità di condividere i terminali con altri.
Alcuni amano personalizzare il proprio tmux con Byobu, un pacchetto che migliora notevolmente l'usabilità di tmux e aggiunge molte combinazioni di tasti. Byobu è incluso in Ubuntu e può essere facilmente installato su Mac tramite Homebrew.
Condivisione di una sessione terminale remota con un amico
A volte, durante il debug di problemi complessi sui vostri server, può sorgere il desiderio di condividere una sessione SSH con qualcuno che non si trova nella stessa stanza. tmux è perfetto per questo compito! Basta seguire pochi semplici passaggi:
- Assicurati che tmux sia installato sul tuo nodo bastione, o su un qualsiasi server con cui intendi lavorare.
- Entrambi dovrete connettervi tramite SSH al dispositivo, utilizzando un unico account.
- Uno di voi deve avviare tmux per iniziare una sessione tmux.
- L'altro deve eseguire tmux attach
- Voilà! Avete un terminale condiviso.
Se desideri sessioni tmux multiutente più sofisticate, prova tmate, un fork di tmux che semplifica notevolmente le sessioni terminali condivise.
Fonte: habr.com
