In questo articolo abbiamo raccolto i nostri migliori consigli per un utilizzo più efficace di SSH. Scoprirai come:
- Aggiungere un secondo fattore al login SSH
- Utilizzare agent forwarding in modo sicuro
- 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
Il secondo fattore di autenticazione per le connessioni SSH può essere aggiunto 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 avviso: solo i client e i 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 client di SSH, mentre per quella del server usa 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 il file della chiave, basta inserire la propria chiave di crittografia e lanciare il comando:$ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_skQuesto creerà le chiavi pubbliche e private e le assocerà al tuo dispositivo U2F. Il compito della chiave segreta sul dispositivo U2F è decifrare 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. In questo approccio, il descrittore viene memorizzato sul dispositivo U2F e ti consente di averlo a disposizione con la chiave di crittografia quando necessario. Puoi creare una chiave residente con il comando:
$ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_skPoi, per riportare il descrittore nella memoria su un nuovo dispositivo, inserisci la chiave di crittografia e lancia il comando:
$ ssh-add -KQuando ti connetti all'host, dovrai ancora attivare la chiave di crittografia.
- Utilizza PIV+PKCS11 e Yubikey. Per connettersi a dispositivi con versioni precedenti di SSHD tramite una chiave di crittografia è necessario un approccio diverso. Yubico ha una guida sull'uso di U2F+SSH con PIV/PKCS11 (inglese). Non è la stessa cosa di FIDO U2F, e anche se il metodo funziona, è complicato capire quale sia la magia che lo sostiene.
- Applicare l'agente ssh yubikey-agent personalizzato. Filippo Valsorda ha scritto un agente SSH per Yubikeys. È completamente nuovo e contiene il minimo indispensabile di funzionalità.
- Utilizzare Touch ID e sekey. Sekey è un agente SSH open source, conserva le chiavi segrete in un enclave sicura del Mac e permette di utilizzare Touch ID per l'accesso.
- Usare Single Sign On SSH. Ho scritto un tutorial per aiutare nella configurazione di questo metodo (inglese). Uno dei vantaggi del single sign on SSH è la possibilità di attivare le politiche di sicurezza del tuo fornitore di identità, inclusa la supporto per l'autenticazione multifattoriale (MFA).
Utilizzo sicuro del forwarding dell'agente
L'agente SSH forwarding consente a un nodo remoto di accedere all'agente SSH del tuo dispositivo locale. Quando usi SSH con l'agente forwarding abilitato (di solito tramite ssh -A), nella connessione ci saranno due canali: la tua sessione interattiva e un canale per agent forwarding. Tramite questo canale, un socket Unix creato dal tuo agente SSH locale si connette al nodo remoto. Questo è un metodo rischioso, poiché un utente con accesso root sul dispositivo remoto potrebbe accedere al tuo agente SSH locale e potenzialmente impersonarti in rete. Utilizzando l'agente SSH standard incluso in Open SSH, potresti non renderti nemmeno conto di quanto accaduto. Avere una chiave U2F (o Sekey) ti aiuterà a bloccare efficacemente qualsiasi tentativo di accesso al tuo agente SSH dall'esterno.
Anche con questa misura di precauzione, sarebbe una buona idea usare l'agente forwarding il meno possibile. Non dovresti utilizzarlo in ogni sessione: usa l'agente forwarding solo quando sei sicuro della sua necessità per la sessione corrente.
Uscire da una sessione bloccata
Interruzioni di rete, comportamenti imprevisti delle applicazioni o sequenze di controllo che bloccano l'input da tastiera: tutte queste sono possibili cause di interruzione di una sessione SSH.
Esistono vari modi per terminare una sessione bloccata:
- Uscire automaticamente in caso di interruzione della rete. Aggiungi il seguente nel tuo .ssh/config:
ServerAliveInterval 5 ServerAliveCountMax 1ssh invierà un'eco all'host remoto ogni ServerAliveInterval secondi per verificare la connessione. Se non riceve risposta dopo ServerAliveCountMax echi, ssh chiuderà la connessione per timeout e uscirà dalla sessione.
- Uscire dalla sessione. ssh utilizza di default il carattere ~ (tilde) come comando di controllo. Il comando ~. chiude la connessione aperta e ti riporta al terminale. (Le sequenze di controllo possono essere inserite solo da una nuova riga.) Il comando ~? mostrerà un elenco completo dei comandi disponibili in questa sessione. Tieni presente che, per digitare il carattere ~ sulle tastiere internazionali, potrebbe essere necessario premere il tasto ~ due volte.
Perché si verificano sessioni bloccate? Nel periodo della creazione di Internet, i computer si spostavano raramente. Quando si utilizzano i laptop e ci si connette a diverse reti WiFi IPv4, l'indirizzo IP cambia. Poiché SSH si basa sulle connessioni TCP, e queste ultime su un endpoint con un indirizzo IP stabile, ogni volta che si passa da una rete all'altra, le connessioni SSH perdono il descrittore del socket e vengono effettivamente interrotte. Quando cambia l'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 in una connessione TCP la interrompa troppo presto. Pertanto, il protocollo tenterà di inviare nuovamente i dati ancora alcune volte prima di arrendersi. Nel frattempo, nella tua sessione terminale sembrerà bloccata. L'IPv6 aggiunge alcune funzionalità legate alla mobilità che consentono al dispositivo di mantenere l'indirizzo di casa 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 quando si passa tra diverse reti o si desidera disconnettersi temporaneamente.
1. Utilizzare o
Se hai davvero bisogno di una connessione che non si interrompa, anche quando passi tra le reti, utilizza la shell mobile Mosh. Questa è una shell sicura che prima utilizza un handshake SSH e poi si sposta sul proprio canale crittografato per tutta la durata della sessione. In questo modo Mosh crea un canale separato, molto resistente e protetto, in grado di sopportare interruzioni della connessione Internet, cambi di indirizzo IP del tuo laptop, interruzioni di rete gravi e molto altro, tutto grazie alla magia delle connessioni UDP e al protocollo di sincronizzazione utilizzato da Mosh.
Per utilizzare Mosh, dovrai installarlo sia sul client che sul server, e aprire le porte 60000-61000 per il traffico UPD non connesso al tuo host remoto. In seguito, per la connessione, basterà utilizzare mosh user@server.
Mosh opera a livello di schermi e tasti premuti, il che gli conferisce diversi vantaggi rispetto al flusso binario standard di input e output tra client e server SSH. Se desideriamo sincronizzare solo schermi e tasti premuti, sarà molto più semplice ripristinare successivamente una connessione interrotta. Mentre SSH bufferizza e invia tutto ciò che è accaduto, Mosh deve solo bufferizzare i tasti premuti e sincronizzare l'ultimo fotogramma della finestra del terminale con il client.
2. Usare tmux
Se desideri "entrare e uscire a piacimento" e mantenere una sessione terminale su un nodo remoto, utilizza tmux. Adoro tmux e lo utilizzo costantemente. Se la tua connessione SSH viene interrotta, per tornare alla tua sessione tmux basta riconnettersi e inserire tmux attach. Inoltre, offre meravigliose funzionalità come schede e pannelli all'interno del terminale, simili alle schede nel terminale iOS, e la possibilità di condividere terminali con altri.
Alcuni amano abbellire il proprio tmux con Byobu, un pacchetto che migliora notevolmente l'usabilità di tmux e aggiunge molte combinazioni di tasti. Byobu è incluso in Ubuntu ed è facile da installare su Mac tramite Homebrew.
Divisione di una sessione terminale remota con un amico
A volte, quando si risolvono problemi complessi sui propri server, si potrebbe desiderare di condividere una sessione SSH con qualcuno che non è nella stessa stanza. tmux è perfetto per questo compito! È sufficiente seguire pochi passaggi:
- Assicurati che tmux sia installato sul tuo nodo bastione o su qualsiasi server con cui intendi lavorare.
- Entrambi dovrete connettervi via SSH al dispositivo utilizzando un solo 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 più sofisticate e multiutente, prova tmate, un fork di tmux che semplifica notevolmente le sessioni terminali condivise.
Fonte: habr.com
