SSH - Configurazione Chiavi per Repository GitHub su VM di Sviluppo.md
1. Scopo del documento
Questo manuale descrive la procedura standard per configurare l'accesso SSH ai repository privati di GitHub direttamente dalle Virtual Machine (VM) di sviluppo.
Obiettivi di sicurezza: - Non utilizzare le chiavi SSH personali dello sviluppatore (per evitare accessi illimitati). - Limitare l'accesso di ogni VM ai soli repository a cui deve avere accesso. - Garantire la massima flessibilità nel caso in cui una VM contenga più repository.
Soluzione adottata: Deploy Keys di GitHub.
2. Concetti Fondamentali
2.1. Cosa sono le Deploy Keys?
Sono chiavi SSH pubbliche che vengono associate esclusivamente a un singolo repository su GitHub.
- Vantaggio: Una chiave caricata su repo-alpha non può essere utilizzata per accedere a repo-beta.
- Limite: GitHub non permette di riutilizzare la stessa chiave pubblica su due repository diversi.
2.2. Architettura di connessione
- VS Code → VM: Utilizza la tua chiave SSH personale (locale) per autenticarti sulla macchina remota.
- VM → GitHub: Utilizza la
Deploy Keyspecifica per il progetto, configurata sulla VM.
3. Procedura di Configurazione (Singolo Repository)
Esegui i seguenti passaggi direttamente tramite terminale collegato alla VM di destinazione.
3.1. Generazione della chiave SSH dedicata
Crea una chiave con un nome identificativo (es. id_ed25519_nomeprogetto):
Nota: Se richiesto, puoi impostare una passphrase (consigliata) o lasciarla vuota per automatismi.
3.2. Aggiunta della chiave pubblica su GitHub
- Visualizza la chiave pubblica generata:
- Copia l'intera stringa (inizia con
ssh-ed25519). - Accedi al repository su GitHub.
- Vai su Settings > Deploy keys > Add deploy key.
- Inserisci un titolo (es.
Chiave VM Sviluppo) e incolla la chiave pubblica. - Spunta Allow write access solo se la VM deve effettuare push.
- Clicca su Add key.
3.3. Configurazione locale del repository (Metodo consigliato)
Per evitare di modificare file globali, utilizza il comando core.sshCommand di Git per legare la chiave a quella specifica cartella:
# Clona il repository usando l'URL standard
git clone git@github.com:owner/nomeprogetto.git
# Entra nella cartella
cd nomeprogetto
# Imposta la chiave SSH per questo repository
git config core.sshCommand "ssh -i ~/.ssh/id_ed25519_nomeprogetto -o IdentitiesOnly=yes"
4. Gestione di Multipli Repository sulla Stessa VM
Poiché GitHub vieta di riutilizzare la stessa chiave su repository diversi, per ogni nuovo progetto ospitato sulla stessa VM dovrai generare una nuova chiave.
Procedura per aggiungere un secondo/ennesimo repository:
-
Genera una nuova chiave:
-
Aggiungi la nuova chiave pubblica come Deploy Key nel rispettivo repository su GitHub (Settings > Deploy keys).
-
Clona il repository:
-
Imposta il comando SSH dedicato per questa cartella:
Risultato: Ogni cartella su quella VM utilizzerà automaticamente la chiave corretta quando esegui git push o git pull.
5. Metodo Alternativo (SSH Config)
In alternativa all'core.sshCommand, puoi utilizzare gli alias di ~/.ssh/config. Questo metodo è utile se preferisci avere un controllo centralizzato.
Esempio:
Aggiungi al file ~/.ssh/config:
Host github.com-alpha
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_alpha
IdentitiesOnly yes
Host github.com-beta
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_beta
IdentitiesOnly yes
Poi clona utilizzando l'alias:
6. Gestione delle Passphrase e ssh-agent
Se hai protetto le chiavi con una passphrase, per evitare di digitarla a ogni comando Git, carica le chiavi nell'agent prima di iniziare a lavorare:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_nomeprogetto
ssh-add ~/.ssh/id_ed25519_nuovoprogetto
Nota: Se utilizzi
ssh-add, puoi rimuovere l'opzione-o IdentitiesOnly=yesdal comando Git, ma è comunque consigliata per evitare che l'agent provi chiavi sbagliate, causando blocchi temporanei da parte di GitHub.
7. Comandi Rapidi (Cheatsheet)
| Operazione | Comando |
|---|---|
| Generare chiave | ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_<repo> |
| Mostrare chiave pubblica | cat ~/.ssh/id_ed25519_<repo>.pub |
| Configurare repo appena clonato | git config core.sshCommand "ssh -i ~/.ssh/id_ed25519_<repo> -o IdentitiesOnly=yes" |
| Verificare configurazione locale | git config --get core.sshCommand |
| Testare la connessione (dentro la repo) | GIT_SSH_COMMAND="ssh -i ~/.ssh/id_ed25519_<repo>" git fetch --dry-run |
8. Risoluzione dei Problemi (FAQ)
| Problema | Soluzione |
|---|---|
Errore: Permission denied (publickey) |
1. Controlla di aver aggiunto la chiave pubblica corretta su GitHub. 2. Verifica che la chiave privata esista nel percorso indicato. 3. Assicurati di essere nella cartella giusta (dove hai eseguito git config). |
Errore: Key already exists su GitHub |
La chiave pubblica è già usata in un altro repository. Genera una nuova chiave specifica per questo progetto. |
| La VM ha perso le chiavi? | Rigenera le chiavi sulla VM e aggiorna le Deploy Key su GitHub (rimuovi la vecchia e aggiungi la nuova). Ricorda di aggiornare il git config core.sshCommand se il percorso della chiave cambia. |
| Push bloccato | Controlla se la Deploy Key ha lo spunto "Allow write access" attivo su GitHub. |
9. Connessione da remoto con VS Code
La configurazione descritta in questo manuale riguarda esclusivamente le operazioni Git all'interno della VM. Per la connessione alla VM tramite VS Code (estensione Remote - SSH), continua a utilizzare la tua chiave SSH personale configurata sul tuo computer locale.
I due livelli non interferiscono tra loro.