Il problema
Avete creato un account di github personale e avete iniziato a caricare i vostri progetti. Ora però avete deciso di creare un’account separato da utilizzare per lavoro. Come facciamo ad impostare il nostro pc per lavorare con due account?
La soluzione
Possiamo creare sul nostro pc due chiavi ssh diverse, e poi impostare un file di configurazione per indicare a git quale chiave usare per i vari progetti.
Questa guida è basata sulle informazioni che troviamo in inglese in questo articolo e sulla documentazione di github.
Creazione della chiave ssh
Prima di tutto, controlliamo il nome della chiave ssh che abbiamo utilizzato finora per connettere il nostro account personale di github. Per farlo scriviamo questo codice sul terminale (su Windows possiamo usare la Git Bash):
ls -al ~/.ssh
Questo comando vi mostrerà tutti i file presenti nella cartella che gestisce le chiavi ssh. In questa cartella dovrebbe esserci un file con uno dei seguenti nomi (che sono quelli di default quando si crea una nuova chiave):
- id_rsa.pub
- id_ecdsa.pub
- id_ed25519.pub
Abbiamo controllato la cartella perché così, quando andremo a creare la nuova chiave ssh, non rischieremo di sovrascrivere quella vecchia dandole lo stesso nome.
Adesso dobbiamo creare la chiave ssh per il nostro nuovo account. Per farlo apriamo il terminale e inseriamo il seguente comando:
ssh-keygen -t rsa -b 4096 -C "indirizzo_email@miosito.it"
Questo codice creerà una chiave ssh, usando il vostro indirizzo email come etichetta.
A questo punto, ci verrà chiesto di inserire un nome per il file che verrà generato. Usiamo un
nome che ci aiuti a distinguere questo file da quello della prima chiave ssh, per esempio
potremmo chiamarlo id_rsa_lavoro
.
Infine ci verrà chiesto di inserire una password.
Ora che abbiamo creato la nostra seconda chiave, dobbiamo assicurarci che SSH sia in grado di trovarla. Per farlo scriviamo il seguente comando nel terminale utilizzando il nome che avete dato alla vostra chiave:
ssh-add ~/.ssh/id_rsa_lavoro
Aggiungiamo la chiave ssh su github
Andiamo ora su github e facciamo il login con l’account che stiamo impostando.
Navighiamo nelle Impostazioni e selezioniamo dal menu di sinistra la voce “SSH and GPG keys”
(puoi provare a premere su questo link se sei già loggato).
Sulla destra del titolo “SSH Keys” troviamo un bottone con scritto “New SSH key”.
Dopo averlo premuto dovremo inserire un nome (title
) per la nostra chiave e poi dovremo copiare il contenuto
del file “id_rsa_lavoro.pub” dentro al campo Key
.
Il file lo potete aprire con un qualsiasi editor di testo, oppure potete mostrarne il contenuto sul terminale con il seguente comando, per poi fare un copia-incolla:
cat ~/.ssh/id_rsa_lavoro.pub
Premiamo infine su “Add SSH Key”, e la nostra nuova chiave verrà associata all’account github.
Creiamo il file di configurazione SSH
L’ultima cosa rimasta da fare è quella di impostare git sul nostro computer in modo da utilizzare entrambe le chiavi.
Per fare questo, dobbiamo creare un file di configurazione nel seguente percorso: ~/.ssh/config
(config
è il nome del file, non ha estensione).
Essendo solo un file di testo, potete utilizzare il vostro editor preferito, o anche un editor
da terminale come vim
o nano
.
Inseriamo la configurazione di default (i commenti sono presenti solo per rendere più chiaro il funzionamento):
# Configurazione di default
# Alias della configurazione
Host github.com
# Nome del sito dal quale scaricheremo i repository
HostName github.com
# Nome del file contenente la chiave privata ssh
IdentityFile ~/.ssh/id_rsa
# Obbliga ssh ad utilizzare solo il file indicato sopra come chiave per il sito
IdentitiesOnly yes
La prima riga, quella che inizia con Host
, ci permette di creare un alias per il nome host (HostName
) dal
quale cloneremo i repository. Dato che questa è la configurazione di default, il nostro alias ha lo
stesso nome dell’host.
Ora creiamo invece un alias diverso che utilizzerà la chiave che abbiamo appena generato. Sotto alla configurazione di default aggiungiamo:
# Per account lavorativo
Host github-lavoro
HostName github.com
IdentityFile ~/.ssh/id_rsa_lavoro
IdentitiesOnly yes
Ovviamente potete usare l’alias che preferite e dovrete inserire nel campo IdentityFile
il nome che poco fa avete
dato alla vostra chiave.
Testiamo il funzionamento
Per assicurarci che il nostro setup funzioni, possiamo fare una semplice richiesta a github. Il sito ci risponderà col nome dell’utente associato alla chiave SSH che stiamo usando.
Nel terminale, scriviamo questo comando:
ssh -T git@github.com
Potreste riceve un avviso che vi indica che l’autenticità dell’host ‘github.com’ non può essere stabilita. In tal caso, alla domanda
Are you sure you want to continue connecting (yes/no)?
rispondete yes
.
Github risponderà alla vostra richiesta con un messaggio simile al seguente:
Hi [nome utente personale]! You've successfully authenticated, but GitHub does not provide shell access.
Se il nome che compare è il vostro nome utente personale, allora va tutto bene. Testiamo adesso il nostro nuovo alias:
ssh -T git@github-lavoro
Ora il messaggio che riceverete da github includerà il nome utente del vostro account lavorativo. In tal caso, complimenti! Avete impostato con successo due chiavi SSH sul vostro pc!
Come usare le due chiavi
D’ora in poi, quando clonerete un repository o aggiungerete una nuova origin, dovrete sempre inserire il vostro alias per utilizzare l’account lavorativo. Per esempio, se clonerete un repo dall’account di lavoro, scriverete:
git clone git@github-lavoro:nome-utente/mio-progetto.git
Buon lavoro!