Al momento di entrare nel mio attuale posto di lavoro, mi è stato chiesto di creare un nuovo account GitHub prima di poter essere un membro dell’organizzazione GitHub dell’azienda e a sua volta ottenere l’accesso a tutti i repository dei progetti privati.
Non è stato fino a quando ho lasciato il portatile di lavoro nel mio armadietto ma avevo ancora bisogno di fare qualcosa che ho sentito il bisogno di gestire entrambi i miei account GitHub sul mio portatile personale (chi ha bisogno di equilibrio tra lavoro e vita privata?)
Per rendere le cose più complicate, il progetto a cui sto lavorando fa riferimento ad altri repository privati nel suo blocco di dipendenze package.json
e ha bisogno di accedervi a npm install
, che per default utilizza la chiave ssh del mio account personale GitHub.
Dopo alcune prove e fallimenti, ecco come alla fine sono riuscito a farlo funzionare:
Crea una nuova ssh-key e aggiungila all’account GitHub di lavoro
$ ssh-keygen -t rsa -b 4096 -C "my_work_email@my_company.com"
Supponiamo che la nuova ssh-key sia stata chiamata “work_rsa”, ora copia il contenuto del file della chiave pubblica appena generata (work_rsa.pub in questo esempio) e incollalo nella pagina di impostazione dell’account GitHub di lavoro come descritto nella pagina di aiuto di GitHub.
Modifica il file di configurazione ssh ( ~/.ssh/config)
Apri il file di configurazione in un editor di testo (crealo se non ce n’è uno nella cartella ~/.ssh) e aggiungi quanto segue:
# Personal GitHub account
Host github.com
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa# Work GitHub account
Host github.com-work
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/work_rsa
Clona il repo del progetto di lavoro (con un indirizzo leggermente diverso)
Per clonare il repo del progetto di lavoro usando la nuova chiave ssh dobbiamo modificare un po’ l’indirizzo ssh del repo. L’url dell’host deve corrispondere all’host definito nel file di configurazione ssh dell’ultimo passo, cioè, dove nell’indirizzo c’è github.com
, sostituirlo con github.com-work
.
E.g, con il seguente indirizzo ssh del repo privato che otteniamo da GitHub:
[email protected]:/.git
Dobbiamo modificare il suo indirizzo così prima di poterlo git clone
:
[email protected]:/.git
$ git clone [email protected]:/.git
Modificare il package.json per installare le dipendenze del repo privato
Nel progetto che ha clonato localmente, trovare le dipendenze del repo privato nel suo package.json e fai la stessa modifica all’indirizzo del loro repo come nel passo 3 (non farei il commit di queste modifiche perché rompe tutto per le altre persone che stanno anche lavorando su questo progetto):
"dependencies": {
"private-module": "git+ssh://[email protected]/.git
...
}
*Potrebbe essere necessario fare prima un’installazione manuale per uno dei moduli privati nel terminale:
$ npm install git+ssh://[email protected]/
in modo che i repo privati vengano riconosciuti nello ssh known_hosts
e possano essere accessibili durante l’installazione di npm delle dipendenze del progetto.