mywiki/linux/security/ssh.md

160 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
Daltra 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 "<commento>"
```
- dove `ed25519` indica lalgoritmo 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 è lemail o lidentificazione 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/<file_name>
```
- <file_name> 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 lestensione `.pub`;
- e quella privata senza estensione.
La chiave pubblica può essere vista con un semplice comando:
```bash
piccihud@WORKSTATION03:~
→ cat /home/piccihud/.ssh/<file_name>.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 <key_name> #il nome della macchina remota alla quale si accederà
hostname 10.21.81.138 #indirizzo ip della macchina remota
user root
IdentityFile ~/.ssh/<file_name> #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 <key_name>`
Ad esempio:
```bash
piccihud@WORKSTATION03:~
→ ssh mnt-bbb
```
## Aggiungere la Chiave SSH allAccount 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 <name>
IdentityFile /home/user/.ssh/<file>
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 <port_number> <username>@<host>
```
## 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/)