SSH
Collegamento da terminale remoto, fornisce login remoto sicuro e altri servizi su canale insicuro.
E' in realtà un'insieme di utilities:
ssh
- secure shell - emulatore di terminale remotosftp
- secure file transfer protocol - trasferimanto di filescp
- secure copy - copia di files tra sistemi remoti
SSH fornisce:
- Crittografazione del canale
- Autenticazione forte - basato sull'uso di chiavi doppie (Pubblica / Privata)
- Tunnel per altri protocolli su ssh (p-es- X Window)
Contrasta:
- IP spoofing
- DNS spoofing
- Alterazioni di routing
SSH è anche usato come canale di connessione sicuro da altre utilities, p.es. Git.
E' una utility Client-Server:
- Il server deve essere attivo sulla macchina che ospita i login
- Il server si autentica con chiave pubblica
- Il client deve accettare e fidarsi della chiave pubblica
E' possibile preinstallare le chiavi pubbliche degli host conosciuti.
Files di configurazione della fiducia che il client accorda ai server:
/etc/ssh/known_hosts
- default per tutti gli utenti, solo l'amministratore lo può editare$HOME/.ssh/known_hosts
- per ciascun utente, a discrezione dell'utente
Uso di SSH
ssh utente@IP
ove utente
è il nome di login sulla macchina server, e IP
è l'indirizzo IP della macchina remota o il suo nome risolto da DNS
- Rispondere 'yes' alla domanda di accettazione della chiave pubblica, la prima volta
- Dare la password di utente
- Uscire dalla shell con 'exit'
- La chiave viene registrata nel file
~/.ssh/known_hosts
- E' possibile editare il file per rimuovere entries errate
Collegamento SSH senza password
Non solo il server si autentica al client con chiavi doppie, ma anche il client deve autenticarsi al server con le proprie chiavi doppie.
Questo diventa utilissimo in due casi principali:
- aumenta la sicurezza prevenendo la presenza di 'Man in the Middle'
- velocizza alcuni tipi di operazioni come il
git push
Vediamo tale configurazione sul client. Notare che non siamo collegati a macchina remota, e i comandi che seguono vanno dati direttamente all'emulatore di terminale locale, p.es. il PC con Windows.
Il seguente è solo un esempio, da personalizzare secondo le proprie esigenze, ed inventandosi le proprie password.
(1) E' necessaria una coppia di chiavi pubblica e privata. Se non se ne dispone già, generarla.
Generazione chiavi asimmetriche sul client:
ssh-keygen
- Accettare la locazione di default ~/.ssh/id_rsa
- Non cambiare il nome di default o ogni comando successivo avrà bisogno di un'opzione col nome del file
- Dare la passphrase 'segreto' ( 2 volte) (per esempio)
- Registrare la chiave allo ssh agent:
ssh-add
- Viene chiesta la passhphrase
La 'passphrase' serve a crittografare il file contenente la chiave privata sul proprio sistema. E' un file molto delicato; se fosse rubato e se è in chiaro, inficierebbe tutta la sicurezza del metodo.
Attenzione alla terminologia:
- password è la stringa segreta per il login in modalità tradizionale
- passphrase è la stringa segreta di slocco della chiave privata
(2) La chiave pubblica deve essere installata sul server, manualmente o con utility appropriata se esiste.
Copia manuale della chiave pubblica
Visualizzare la chiave pubblica dal file:
cat ~/.ssh/id_rsa.pub
Copiare tutto il file nel clipboard.
Collegarsi al server: ssh utente@IP
- Siamo ancora in modo 'normale', quindi viene ancora chiesta la password, non la passphrase
Editare il file contenente le chiavi autorizzate dal server:
vi ~/.ssh/authorized_keys
Incollare la chiave precedentemente copiata nel clipboard.
E' indispensabile che il file delle chiavi permesse abbia sicurezza aumentata:
chmod 600 authorized_keys
Uscire quindi dalla sessione 'normale' col server, col comando exit
.
Copia con utility, alternativa alla copia manuale.
ssh-copy-id user@IP
compie in automatico tutte le operazioni invece che eseguirle manualmente. L'utility ssh-copy-id
non è presente su tutte le distribuzioni Linux, ma in RHEL fortunatamente c'è.
Questo permette una facile installazione anche per chi non conosce bene l'editor vi
.
(3) Test della connessione con chiavi.
ssh utente@IP
Viene chiesta la passphrase. Questa non è la password di accesso al server, ma la stringa con cui è stata crittografata la chiave privata sul client.
Il sistema del client di solito pone tale 'passphrase' in una cache locale, per alcuni minuti o fino al termine del programma, a seconda delle versioni.Test da macchina remota:
ssh utente@IP
RHEL, quando è usato come client, possiede l'utilissimo comando ssh-agent
, il quale è un demone che richiede la passphrase solo la prima volta e la registra in memoria, crittografandola, quindi rendendola disponibile a ssh
ad ogni successiva connessione a sistemi remoti.
Considerazioni
La coppia di chiavi pubblica e privata costituisce ora l'identità della persona. Queste chiavi devono essere conservate esternamente ai computer, p.es. su chiavetta USB, e non devono andare perse.
E' possibile il collegamento ai server remoti configurati solo da una macchina locale che abbia le chiavi installate.
Se la macchina locale non è di proprietà dell'utente, conviene disinstallare le chiavi dopo l'uso, per sicurezza.
Meglio sarebbe utilizzare un intero sistema operativo Linux con boot, ospitato su chiavetta USB. Due esempi notevoli sono la distribuzione Knoppix, che ha molte utilities di troubleshooting, o l'eccellente distribuzione di sicurezza Tails, che ha incluso anche il browser anonimo Tor.
Esistonp più formati di chiavi doppie. Ssh usa il formato RSA.
Emulatore di Terminale in Windows
Una dei programmi di emulazione di terminale più usati in Windows è Putty. Non è però completamente intuitivo e sarebbe opportuno leggere il manuale.
Qualunque emulatore di terminale venga selezionato, è fortemente consigliato conoscerlo approfonditamente.
Si raccomanda qui l'uso di Git Bash, liberamente e gratuitamente disponibile in rete, che ha le proprietà:
- emulazione completa di Bash di linux con librerie Windows
- include l'ambiente di controllo versioni Git
- ha l'utility
ssh-copy-id
Collegamento parametrico
Per evitare digitazioni inutili, si può redigere il file di configurazione sul client: vi ~/.ssh/config
Host userv
User mich
Hostname 192.168.1.2
Port 22
IdentityFile ~/.ssh/id_rsa
Questo è solo un esempio: sostituire il proprio nome di login sul server e l'indirizzo del server. Inoltre userv
è solo un'etichetta, si può usare una stringa qualsiasi.
Volendo, si possono aggiungere più paragrafi, per più host remoti.
Test:
ssh userv
Dovrebbe avvenire il collegamento senza password, con eventuale richiesta di passphrase.