97 lines
3.9 KiB
Markdown
97 lines
3.9 KiB
Markdown
---
|
||
title: Creazione e gestione chiavi SSH
|
||
date: 2024-07-06
|
||
author: dado
|
||
description: Come creare chiavi ssh per collegarsi a macchine remote
|
||
tags:
|
||
- linux
|
||
- ssh
|
||
- server
|
||
- shell
|
||
---
|
||
|
||
**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 "<commento>" -f /home/user/.ssh/key_name
|
||
```
|
||
|
||
- 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
|
||
ssh-keygen -t ed25519 -C "dado" -f ~/.ssh/key_name
|
||
Generating public/private ed25519 key pair.
|
||
```
|
||
|
||
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 venisse 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.
|
||
|
||
## Caricamento della chiave SSH nella macchina remota
|
||
|
||
L'output del comando precedente deve essere copiato nel file `.ssh/authorized_keys` presente sulla macchina remota.
|
||
|
||
```bash
|
||
ssh-copy-id -i ~/.ssh/key_name.pub -p <port_number> <username>@<host>
|
||
```
|
||
|
||
### Configurazione SSH sulla macchina locale
|
||
|
||
Nel file di configurazione locale, va indicato come raggiungere l'host remoto:
|
||
|
||
```bash
|
||
cat .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
|
||
|
||
Ora, per accedere alla macchina basta digitare: `ssh <key_name>`
|
||
|
||
## Riferimenti
|
||
|
||
- [enable-ssh-server-debian](https://linuxhint.com/enable-ssh-server-debian/)
|
||
- [SSH](https://wiki.debian.org/it/SSH)
|
||
- [connecting-to-github-with-ssh](https://docs.github.com/en/authentication/connecting-to-github-with-ssh)
|
||
- [generare-chiavi-ssh](https://kinsta.com/it/blog/generare-chiavi-ssh/)
|