mywiki/linux/security/ssh.md

160 lines
5.7 KiB
Markdown
Raw Normal View History

2023-02-04 16:03:52 +01:00
# 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`
2023-06-16 18:02:45 +02:00
## Copiare la chiave pubblica in remoto
```bash
ssh-copy-id -i ~/.ssh/id_rsa.pub -p <port_number> <username>@<host>
```
2023-02-04 16:03:52 +01:00
## 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/)