Gestire chiavi multiple SSH per diversi account GitHub

Tue 02 August 2022

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:

  1. Creazione di una chiave SSH diversa per ogni account GitHub.com
  2. Registrazione di ogni chiave SSH associata al rispettivo account GitHub.com
  3. 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 chiave id_rsa_personale
  • ogni URL che usa lavoro.github.com userà la chiave id_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.