Se hai due account GitHub — ad esempio uno personale e uno aziendale — e provi a configurarli entrambi nel file ~/.ssh/config in questo modo, avrai un problema:
Host github.com
User git
HostName github.com
IdentityFile "C:\Users\marco\.ssh\github_lavoro"
Host github.com
User git
HostName github.com
IdentityFile "C:\Users\marco\.ssh\github_personale"
SSH legge il file dall’alto verso il basso e si ferma al primo blocco che corrisponde all’host cercato. Il secondo account viene ignorato.
La soluzione: usare alias diversi
Basta assegnare un nome alias al secondo blocco. L’alias è arbitrario, ma deve essere diverso da github.com. La riga HostName si occuperà comunque di puntare al server corretto.
Host github.com
User git
HostName github.com
PreferredAuthentications publickey
IdentityFile "C:\Users\marco\.ssh\github_lavoro"
Host github-personale
User git
HostName github.com
PreferredAuthentications publickey
IdentityFile "C:\Users\marco\.ssh\github_personale"
Verificare che funzioni
Testa la connessione per entrambi gli account:
ssh -T git@github.com
# Hi marco-lavoro! You've successfully authenticated...
ssh -T git@github-personale
# Hi marco-personale! You've successfully authenticated...
Usare il secondo account nei repository
Ogni volta che lavori con un repo del secondo account, devi usare l’alias al posto di github.com nell’URL remoto.
Clonare un nuovo repository:
git clone git@github-personale:marco-personale/mio-progetto.git
Aggiornare un repository già clonato:
git remote set-url origin git@github-personale:marco-personale/mio-progetto.git
Puoi verificare l’URL remoto attuale con:
git remote -v
Attenzione: HTTPS vs SSH
C’è un caso in cui tutto quanto visto finora non funziona: quando il remote del repository usa HTTPS invece di SSH.
Verifica il protocollo con git remote -v. Se l’output assomiglia a questo:
origin https://github.com/marco-personale/mio-progetto.git (fetch)
origin https://github.com/marco-personale/mio-progetto.git (push)
significa che Git sta usando HTTPS, e il file ~/.ssh/config viene completamente ignorato. Non importa quanto tu abbia configurato gli alias SSH: il push andrà sempre sull’account sbagliato.
La soluzione è convertire il remote da HTTPS a SSH:
git remote set-url origin git@github-personale:marco-personale/mio-progetto.git
Verifica che la modifica sia andata a buon fine:
git remote -v
# origin git@github-personale:marco-personale/mio-progetto.git (fetch)
# origin git@github-personale:marco-personale/mio-progetto.git (push)
Da questo momento git push userà SSH con la chiave corretta del secondo account.
Il primo account continua a funzionare esattamente come prima, senza modifiche ai repository esistenti.