Skip to content

Commit 09809b7

Browse files
authored
Merge pull request #52 from geegeek/patch-8
Update 2024-11-02-howto-gestione-chiavi-ssh-virtuali.md
2 parents f5d7eaf + 8cf0889 commit 09809b7

File tree

1 file changed

+143
-69
lines changed

1 file changed

+143
-69
lines changed

_posts/2024-11-02-howto-gestione-chiavi-ssh-virtuali.md

Lines changed: 143 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -15,122 +15,196 @@ tags:
1515
- sicurezza
1616
---
1717

18-
Quando si duplicano macchine virtuali, è comune incontrare il problema delle chiavi SSH duplicate. Queste duplicazioni possono causare conflitti e avvisi di sicurezza durante le connessioni SSH. Questo articolo fornisce una soluzione generale per generare chiavi SSH uniche per ogni macchina clonata, indipendentemente dall'infrastruttura di virtualizzazione utilizzata.
18+
# Cloud-Init su Linux: Rigenerare le Chiavi SSH in Automatico per il Tuo Homelab
1919

20-
## Preparazione del Template
20+
*Autore: Luigi Smiraglio*
2121

22-
Prima di creare il template, è fondamentale assicurarsi che le chiavi host SSH esistenti vengano rimosse. Questo processo garantirà che nuove chiavi SSH vengano generate al primo avvio della macchina clonata.
22+
## Introduzione
2323

24-
## Rimozione delle Chiavi SSH Esistenti
24+
Nel mondo degli homelab, è comune utilizzare macchine virtuali clonando un template preconfigurato. Questo metodo, sebbene efficiente, può causare problemi di sicurezza, specialmente con le chiavi SSH duplicate. In questa guida, vedremo come utilizzare **cloud-init** su Debian per rigenerare automaticamente le chiavi SSH al primo avvio di una macchina clonata, garantendo un ambiente più sicuro e affidabile.
2525

26-
Esegui il seguente comando sulla macchina template:
26+
## Cos'è `cloud-init`?
27+
28+
`cloud-init` è uno strumento potente per la configurazione automatica delle istanze al primo avvio. Originariamente progettato per ambienti cloud, può essere utilizzato efficacemente anche in ambienti virtualizzati come VMware, Proxmox o nel tuo homelab. Consente di eseguire script e configurazioni iniziali, come la rigenerazione delle chiavi SSH e la personalizzazione della rete.
29+
30+
## Il Problema delle Chiavi SSH Duplicate
31+
32+
Clonando macchine virtuali da un template, tutte le istanze condividono le stesse chiavi SSH. Questo può causare avvisi di sicurezza quando si tenta di connettersi tramite SSH, poiché il client rileva una chiave host già conosciuta con un'impronta digitale diversa. Ad esempio:
33+
34+
```
35+
The authenticity of host '10.290.70.139 (10.290.70.139)' can't be established.
36+
ED25519 key fingerprint is SHA256:bCtJRRv99999999Jshjyintpp/Fl8Z99Vv99Leeimtg.
37+
This host key is known by the following other names/addresses:
38+
39+
~/.ssh/known_hosts:1: [hashed name]
40+
~/.ssh/known_hosts:4: [hashed name]
41+
~/.ssh/known_hosts:5: [hashed name]
42+
~/.ssh/known_hosts:6: [hashed name]
43+
~/.ssh/known_hosts:7: [hashed name]
44+
~/.ssh/known_hosts:8: [hashed name]
45+
~/.ssh/known_hosts:9: [hashed name]
46+
~/.ssh/known_hosts:10: [hashed name]
47+
(1 additional names omitted)
48+
Are you sure you want to continue connecting (yes/no/[fingerprint])?
49+
```
50+
51+
Questo messaggio indica un potenziale rischio di sicurezza, suggerendo un possibile attacco man-in-the-middle. Rigenerare le chiavi SSH per ogni macchina clonata risolve questo problema, migliorando la sicurezza dell'ambiente.
52+
53+
## Soluzione: Utilizzare `cloud-init` nel Tuo Homelab
54+
55+
Anche se associato ai provider cloud, `cloud-init` può essere configurato per funzionare efficacemente nel tuo homelab. Ecco come implementarlo su una macchina Debian in un ambiente virtualizzato come VMware o Proxmox.
56+
57+
### 1. Installazione e Configurazione di `cloud-init`
58+
59+
#### a. Installare `cloud-init`
60+
61+
Verifica se `cloud-init` è già installato. In caso contrario, installalo con:
2762

2863
```bash
29-
rm /etc/ssh/ssh_host_*
64+
apt update && apt upgrade -y
65+
apt install cloud-init -y
3066
```
3167

32-
## Configurazione della Rigenerazione
68+
#### b. Configurare `cloud-init` per Rigenerare le Chiavi SSH
3369

34-
Si proceda quindi con la rigenerazione delle chiavi
70+
Configura `cloud-init` per eliminare e rigenerare le chiavi SSH al primo avvio della macchina clonata.
3571

36-
### Opzione 1: Utilizzo di cloud-init
72+
1. **Modifica il File di Configurazione**:
3773

38-
Installa cloud-init:
74+
Apri `/etc/cloud/cloud.cfg` con un editor di testo:
3975

4076
```bash
41-
apt-get update
42-
apt-get install cloud-init
77+
nano /etc/cloud/cloud.cfg
4378
```
4479

45-
Configura `/etc/cloud/cloud.cfg`:
80+
2. **Aggiungi o Modifica le Seguenti Linee**:
4681

4782
```yaml
83+
#########################################################
84+
#cloud-config OFF (datasource_list)
85+
# cloud-init per rigenerare le chiavi SSH al primo avvio della macchina template
86+
#########################################################
87+
88+
# Evita la ricerca di sorgenti dati cloud
89+
90+
datasource_list: [ None ]
91+
92+
# Gestione delle chiavi SSH
93+
4894
ssh_deletekeys: true
4995
ssh_genkeytypes: ['ed25519', 'rsa']
96+
97+
# Disabilita la gestione della rete da parte di cloud-init
98+
network:
99+
config: disabled
50100
```
51101
52-
### Opzione 2: Script di Inizializzazione
102+
- **`datasource_list: [ None ]`**: Impedisce a `cloud-init` di cercare sorgenti dati cloud, utile per ambienti non cloud.
103+
- **`ssh_deletekeys: true`**: Elimina le chiavi SSH esistenti.
104+
- **`ssh_genkeytypes`**: Specifica i tipi di chiavi SSH da generare.
105+
- **`network`**: Disabilita la gestione della rete da parte di `cloud-init` per evitare conflitti.
106+
107+
3. **Salva e Chiudi il File**.
53108

54-
Crea il file `/etc/init.d/regenerate-ssh-keys`:
109+
#### c. Abilitare `cloud-init` all'Avvio
110+
111+
Assicurati che `cloud-init` sia abilitato per eseguire le configurazioni al primo avvio:
55112

56113
```bash
57-
#!/bin/bash
58-
### BEGIN INIT INFO
59-
# Provides: regenerate-ssh-keys
60-
# Required-Start: $remote_fs
61-
# Required-Stop:
62-
# Default-Start: 2 3 4 5
63-
# Default-Stop:
64-
# Short-Description: Regenerate SSH host keys
65-
### END INIT INFO
66-
67-
case "$1" in
68-
start)
69-
if [ ! -f /etc/ssh/ssh_host_ed25519_key ]; then
70-
dpkg-reconfigure openssh-server
71-
fi
72-
;;
73-
*)
74-
echo "Usage: /etc/init.d/regenerate-ssh-keys start"
75-
exit 1
76-
;;
77-
esac
78-
79-
exit 0
114+
systemctl enable cloud-init
80115
```
81116

82-
Rendi lo script eseguibile e abilitalo:
117+
> **Nota:** Non avviare manualmente `cloud-init` con ` systemctl start cloud-init`. Deve essere eseguito automaticamente al primo avvio per funzionare correttamente.
118+
119+
### 2. Preparazione del Template
83120

121+
Prima di trasformare la macchina in un template, è necessario pulire i dati di `cloud-init` e spegnere la macchina. Sebbene `cloud-init` possa rigenerare automaticamente le chiavi SSH in un sistema già configurato, preferisco eliminare manualmente le chiavi host SSH esistenti per garantire che il processo di rigenerazione venga avviato correttamente. Questo perché, al primo accesso SSH, posso indirettamente avere conferma che tale meccanismo stia funzionando.
122+
123+
Esegui il seguente comando sulla macchina template:
84124
```bash
85-
chmod +x /etc/init.d/regenerate-ssh-keys
86-
update-rc.d regenerate-ssh-keys defaults
125+
rm /etc/ssh/ssh_host_*
87126
```
88127

89-
## Creazione del Template
128+
## Rimozione delle Chiavi SSH Esistenti
90129

91-
Spegni la macchina:
130+
Esegui il seguente comando sulla macchina template:
92131

93132
```bash
94-
shutdown -h now
133+
rm /etc/ssh/ssh_host_*
95134
```
96135

97-
Crea il template secondo la tua piattaforma:
98-
99-
- **VMware**: Converti la macchina in template
100-
- **VirtualBox**: Esporta come appliance
101-
- **Altre Piattaforme**: Segui le procedure specifiche
136+
#### a. Pulizia di `cloud-init`
102137

103-
## Clonazione delle Macchine
138+
Pulisci i dati di `cloud-init` per simulare un primo avvio:
104139

105-
1. Clona la macchina dal template
106-
2. Avvia la macchina clonata
107-
3. Le nuove chiavi SSH verranno generate automaticamente
140+
```bash
141+
cloud-init clean
142+
```
108143

109-
## Gestione del File known_hosts
144+
#### b. Spegnere la Macchina
110145

111-
Per evitare conflitti con le vecchie chiavi:
146+
Spegni la macchina in modo sicuro:
112147

113148
```bash
114-
# Rimuovi la vecchia chiave
115-
ssh-keygen -R <indirizzo_IP_o_nome_host>
149+
shutdown -h now
150+
```
151+
La macchina è ora pronta per diventare un template.
116152

117-
# Esempio
118-
ssh-keygen -R 10.10.10.100
153+
### 3.a Creazione del Template su VMware
119154

120-
# Connettiti alla macchina
121-
ssh utente@<indirizzo_IP_o_nome_host>
122-
```
155+
1. **Seleziona la Macchina Spenta**:
156+
157+
Apri VMware e individua la macchina Debian preparata.
158+
159+
2. **Converti la Macchina in un Template**:
160+
161+
Segui le procedure specifiche di VMware. Assicurati di:
162+
163+
- **Disattivare "Connect At Power On"** per la scheda di rete.
164+
- **Impostare il "MAC Address" su Automatico** per evitare conflitti di rete.
165+
166+
### 3.b Creazione del Template su Proxmox
167+
168+
1. **Seleziona la Macchina Spenta**:
169+
170+
Apri Proxmox e individua la macchina Debian preparata.
171+
172+
2. **Converti la Macchina in un Template**:
123173

124-
## Automazione
174+
Segui le procedure specifiche di Proxmox. Assicurati di:
125175

126-
Per ambienti con numerose macchine virtuali, considera l'uso di:
176+
- **Disattivare l'Avvio Automatico** per la scheda di rete.
177+
- **Impostare il "MAC Address" su Automatico** per evitare conflitti di rete.
178+
- **Convertire la VM in un Template**:
179+
- Clicca con il tasto destro sulla macchina virtuale.
180+
- Seleziona **"Convert to Template"**.
181+
- Conferma l'operazione.
127182

128-
- Ansible
129-
- Puppet
130-
- Chef
183+
Questo processo creerà un template che potrà essere utilizzato per clonare nuove macchine senza conflitti di rete o chiavi SSH duplicate.
131184

132-
Questi strumenti possono automatizzare la configurazione delle chiavi SSH e altre impostazioni iniziali.
185+
### 4. Clonazione delle Macchine dal Template
186+
187+
Ogni volta che cloni una nuova macchina dal template:
188+
189+
1. **Avvia la Macchina Clonata**:
190+
191+
Al primo avvio, `cloud-init` rigenererà automaticamente le chiavi SSH.
192+
193+
2. **Verifica le Nuove Chiavi SSH**:
194+
195+
Controlla le nuove chiavi generate:
196+
197+
```bash
198+
ls /etc/ssh/ssh_host_*
199+
```
133200

134201
## Conclusione
135202

136-
Seguendo questa guida, ogni macchina virtuale clonata avrà una chiave SSH unica, eliminando conflitti e migliorando la sicurezza. Questa soluzione è applicabile a qualsiasi infrastruttura di virtualizzazione e garantisce una gestione efficiente delle macchine virtuali clonate.
203+
Utilizzando `cloud-init` nel tuo homelab, automatizzi la rigenerazione delle chiavi SSH per ogni nuova macchina clonata, migliorando la sicurezza e semplificando la gestione delle macchine virtuali. Questa soluzione è adattabile a vari sistemi operativi e piattaforme di virtualizzazione, rendendola estremamente flessibile.
204+
205+
---
206+
207+
## Link
208+
209+
- [Documentazione Ufficiale di cloud-init](https://cloudinit.readthedocs.io/en/latest/index.html)
210+

0 commit comments

Comments
 (0)