# Creazione e gestione chiavi SSH **SSH** è un protocollo client / server utilizzato per i login remoti. Utilizzando la crittografia per l'autenticazione, SSH fornisce un metodo crittografato per accedere al server o ad un'altra macchina. ## Installazione SSH ```bash sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh #Abilita SSH all'accensione della macchina ``` ## Creazione chiave SSH Il protocollo SSH utilizza una tecnica di crittografia chiamata crittografia asimmetrica. Fondamentalmente, la crittografia asimmetrica è un sistema che usa una coppia di chiavi, cioè la *chiave pubblica* e quella *privata*. La chiave pubblica può essere condivisa con chiunque, avendo come scopo principale quello di criptare i dati, convertendo il messaggio in un codice segreto. Questa chiave viene solitamente inviata ad altri sistemi, per esempio i server, per criptare i dati prima di inviarli su Internet. D’altra parte, la chiave privata è quella che deve rimanere segreta e viene usata per decifrare i dati crittografati con la chiave pubblica. Senza di essa, è impossibile decodificare le informazioni criptate. Questo metodo permette al client e al server di mantenere un canale di comunicazione sicuro. Ecco cosa succede in background quando si avvia una connessione SSH ad un server: - Il client invia la chiave pubblica al server; - Il server chiede al client di firmare un messaggio casuale criptato con la chiave pubblica usando la chiave privata; - Il client firma il messaggio e inoltra il risultato al server; - Viene stabilita una connessione sicura tra il client e il server. La coppia di chiavi viene creata sulla propria macchina (client) in questo modo: ```bash → ssh-keygen -t ed25519 -C "" ``` - dove `ed25519` indica l’algoritmo utilizzato per creare la firma digitale della coppia di chiavi. Se il sistema lo supporta, ed25519 è il miglior algoritmo per creare coppie di chiavi SSH; - il flag `-C` è utilizzato per fornire un *commento* personalizzato alla fine della chiave pubblica, che di solito è l’email o l’identificazione del creatore della coppia di chiavi. Ecco un esempio: ```bash piccihud@WORKSTATION03:~ → ssh-keygen -t ed25519 -C "piccihud" Generating public/private ed25519 key pair. Enter file in which to save the key (~/.ssh/id_ed25519): ~/.ssh/ ``` - indica il nome del file in cui sarà salvata la chiave. Poi verrà chiesta una *passphrase* da aggiungere alla coppia di chiavi. Questo aggiunge un ulteriore livello di sicurezza se, in qualsiasi momento, il vostro dispositivo viene compromesso. Non è obbligatorio aggiungere una passphrase, ma è sempre raccomandato. Questo comando genera due file nella directory selezionata (comunemente ~/.ssh): - la chiave pubblica con l’estensione `.pub`; - e quella privata senza estensione. La chiave pubblica può essere vista con un semplice comando: ```bash piccihud@WORKSTATION03:~ → cat /home/piccihud/.ssh/.pub ``` ## Caricamento della chiave SSH nella macchina remota (server) L'output del comando precedente deve essere copiato nel file **.ssh/authorized_keys** presente sulla macchina remota. Per prima cosa, Si accede tramite SSH alla macchina remota: ```bash → ssh user@indirizzo_ip piccihud@WORKSTATION03:~ → ssh root@10.21.81.138 -p 1220 (per una porta differente dalla 22) [15:33:25]root@server:~ → cd .ssh [15:33:31]root@server:~/.ssh → echo ssh-ed25519 ******************************************************* piccihud >> authorized_keys ``` Oppure, se si preferisce, si può utilizzare Nano ovvero Vim. Tramite il comando `cat .ssh/authorized_keys` o `less .ssh/authorized_keys` è possibile vedere la propria chiave nel file di configurazione. ### Configurazione SSH sulla macchina locale Nel file di configurazione locale, va indicato come raggiungere l'host remoto: ```bash piccihud@WORKSTATION03:~ → vim .ssh/config host #il nome della macchina remota alla quale si accederà hostname 10.21.81.138 #indirizzo ip della macchina remota user root IdentityFile ~/.ssh/ #indicare il percorso della chiave ssh privata TCPKeepAlive yes port 22 ``` ### Accedere alla macchina remota Per accedere a una macchina server tramite SSH è necessario conoscere l'indirizzo ip di questa macchina e il nome dell'utente. Ciò è possibile scoprirlo con questi semplici comandi: ```bash → hostname -I 192.168.0.115 → whoami piccihud ``` In assenza della chiave, quindi si può sempre accedere in questo modo: ```bash → ssh piccihud@192.168.0.115 ``` Altrimenti, per accedere alla macchina basta digitare: `→ ssh ` Ad esempio: ```bash piccihud@WORKSTATION03:~ → ssh mnt-bbb ``` ## Aggiungere la Chiave SSH all’Account Git Nelle impostazioni del proprio account, aggiungere la propria chiave pubblica nel campo `SSH and GPG keys`. ![SSH](./asset/git/gitea-ssh.png) Quindi, configurare il file .ssh/config nella macchina locale: ```bash # host gitea.it/piccihud # hostname 10.97.57.55 user IdentityFile /home/user/.ssh/ TCPKeepAlive yes port 22 ``` Modificare le impostazioni di `git`: `git config --global --edit` ## Copiare la chiave pubblica in remoto ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub -p @ ``` ## Collegamenti - [https://linuxhint.com/enable-ssh-server-debian/](https://linuxhint.com/enable-ssh-server-debian/) - [https://wiki.debian.org/it/SSH](https://wiki.debian.org/it/SSH) - [https://docs.github.com/en/authentication/connecting-to-github-with-ssh](https://docs.github.com/en/authentication/connecting-to-github-with-ssh) - [https://kinsta.com/it/blog/generare-chiavi-ssh/](https://kinsta.com/it/blog/generare-chiavi-ssh/)