Gestire chiavi multiple SSH per diversi account GitHub
Nel mondo del lavoro moderno, un soggetto (magari freelance) lavora con molti clienti contemporaneamente, ed è molto facile che al soggetto sia assegnata una mail della compagnia per la quale sta lavorando, necessaria per accedere i repository GitHub sui quali sono versionati i progetti. In questi casi, l'account dell'utente non può essere usato per accedere il GitHub della società ma dovrà essere usato l'account creato con la mail della società. Quindi, se il freelance ha più di un cliente, in pochissimo tempo si troverà a gestire diversi account GitHub con diversi account.
Qual è il problema con chiavi SSH multiple?
Se si hanno differenti account GitHub.com è molto difficile organizzare le
chiavi SSH in modo tale da poter eseguire operazioni di push
e pull
con le
credenziali corrette per il corretto repository.
Quando si cerca di eseguire le operazioni suddette, il sistema tenta di prelevare la chiave SSH da usare che non sempre sarà la chiave corretta. Spesso, sarà prelevata la prima chiave che capita e per qualche progetto avremo problemi di connessione provando a connettersi con l'utente errato.
Soluzione proposta
La soluzione proposta prevede i seguenti passi da completare:
- Creazione di una chiave SSH diversa per ogni account GitHub.com
- Registrazione di ogni chiave SSH associata al rispettivo account GitHub.com
- Creazione del file
~/.ssh/config
I primi due passi non variano rispetto al processo standard con il quale ci si
connette a GitHub.com utilizzando una chiave SSH; creazione di una chiave
locale SSH
e copia della chiave pubblica all'interno del proprio account
GitHub.com.
La soluzione proposta si concentra sul punto numero 3 che consentirà di
utilizzare differenti chiavi SSH
per differenti account GitHub
.
Eseguire backup delle chiavi SSH esistenti
E' conveniente eseguire il backup delle chiavi SSH
esistenti anche se tutto
funziona correttamente. Per fare ciò basta copiare la cartella ~/.ssh
.
Creazione chiavi SSH
Se già si è in possesso di diverse chiavi SSH
, probabilmente non è necessario
crearne di nuove. Tuttavia, sarà necessario registrare le chiavi attraverso
ssh-agent
se non fatto in precedenza. Se si riscontrano dei problemi, creare
una nuova chiave SSH
è semplice e veloce.
Visualizzare le chiavi esistenti
Possiamo visualizzare tutte le chiavi SSH
all'interno della cartella ~/.ssh/
.
Se è stata creata la chiave SSH
come descritto precedentemente, dovremmo vedere
all'interno della cartella due file denominati id_rsa
e id_rsa.pub
; queste
sono le chiavi private e pubbliche, rispettivamente.
Se già si hanno a disposizione le chiavi SSH
necessarie, la sezione sulla
crezione della chiave SSH
può essere saltata. In alternativa, leggere le
istruzioni per creare una o più chiavi SSH
.
Creazione di una nuova chiave SSH
Puoi creare una nuova chiave SSH
eseguendo il comando seguente, sostituendo l'indirizzo
email con il proprio:
ssh-keygen -t rsa -b 4096 -C "la_tua_email@example.com"
Il comando richiede il path all'interno del quale memorizzare la
coppia di chiavi pubblica e privata, proponendo il percorso standard ~/.ssh
.
Il nome delle chiavi dovrebbe allinearsi alla denominazione standard che
prevede il prefisso id_rsa
seguito da un nome che descriva il tipo di chiave.
Supponiamo di voler creare due chiavi diverse una per il lavoro ed una personale, potresti chiamare le chiavi id_rsa_lavoro
e id_rsa_personale
.
Durante la creazione delle chiavi, il comando richiederà una passphrase
(opzionale) per
assicurare ulteriormente le chiavi.
Registrazione delle chiavi SSH
Le nuovi chiavi SSH
devono essere registrate prima di poter essere utilizzate su GitHub
. Per
registrare le chiavi, utilizziamo ssh-agent
e per poterlo usare, abbiamo
bisogno di vedere se il comando è attivo. Per effettuare la verifica, eseguire:
eval "$(ssh-agent -s)"
Se l'agente è in esecuzione, è possibile aggiungere la chiave SSH
. Il comando
di aggiunta deve essere ripetuto per ogni chiave che si vuole aggiungere. Ad
esempio:
ssh-add ~/.ssh/id_rsa_personal
Aggiungere le chiavi SSH su GitHub.com
E' possibile seguire la documentazione ufficiale nel caso cambi il processo sul loro sito.
Al momento della scrittura dell'articolo, possiamo copiare la chiave pubblica della chiave SSH e copiarla all'interno delle Impostazioni del portale GitHub.
Per ogni chiave che si vuole attivare occorre fare login all'interno dell'account GitHub.com e copiare la chiave pubblica rispettiva.
Creazione del file config
Il file config
è usato per stabilire quale chiave SSH
deve essere usata.
Il file config
risiede all'interno del percorso ~/.ssh/config
; se il file
non esiste crearlo con il seguente comando:
touch ~/.ssh/config
Un esempio del contenuto del file config
per le chiavi in esempio:
Host personale.github.com
HostName github.com
PreferredAuthentications publickey
IdentifyFile ~/.ssh/id_rsa_personale
Host lavoro.github.com
HostName github.com
PreferredAuthentications publickey
IdentifyFile ~/.ssh/id_rsa_lavoro
Da notare che la proprietà Host
cambia a seconda dell'account github al quale
ci si riferisce.
In particolare, è specificato che:
- ogni URL che usa
personale.github.com
userà la chiaveid_rsa_personale
- ogni URL che usa
lavoro.github.com
userà la chiaveid_rsa_lavoro
Clone del progetto
Dopo aver eseguito i passi descritti in precedenza, c'è un ultimo passaggio da
fare: eseguire il clone
del progetto.
Quando si esegue un clone
di un progetto usando SSH, il formato URL è:
git@github.com:USERNAME/PROJECT.git
Possiamo quindi sostituire github.com
con il valore associato all'Host
inserito all'interno del file config
, a seconda del repository che vogliamo
utilizzare.
As esempio se volessimo eseguire il clone per USERNAME=pippo
e
PROJECT=progetto
avremo la URL:
git@github.com:pippo/progetto.git
Per usare le chiavi definite nel file config potremo richiamare il comando con:
git@personale.github.com:pippo/progetto.git
# oppure
git@lavoro.github.com:pippo/progetto.git
Conclusione
Se hai seguito l'articolo dovresti aver appreso come configurare più chiavi SSH per lavorare con multipli account GitHub.com.
Il trucco proposto consente di puntare i vari repository inserendo il valore
dell'Host
inserito nel file config
e quindi lavorare con URL che cominciano
con git@XXX.github.com
.
Questo approccio è molto comodo quando si vuole operare in contemporanea su più progetti presenti su account diversi di Github.