Ao entrar no meu local de trabalho atual, me pediram para criar uma nova conta GitHub antes de poder ser membro da organização GitHub da empresa e, por sua vez, ter acesso a todos os repositórios privados do projeto.
Só quando deixei o laptop de trabalho no meu cacifo, mas ainda precisava fazer algo que eu sentia a necessidade de gerenciar ambas as minhas contas GitHub no meu laptop pessoal (quem precisa de balanço trabalho-vida?)
Para tornar as coisas mais complicadas, o projeto que estou trabalhando em referências outros repositórios privados em seu bloco de dependências package.json
e precisava acessá-los em npm install
, que por padrão usa a chave ssh-key da minha conta pessoal GitHub.
Após algumas tentativas e falhas, aqui está como eu finalmente consegui fazer funcionar:
Criar uma nova ssh-key e adicioná-la ao trabalho conta GitHub
$ ssh-keygen -t rsa -b 4096 -C "my_work_email@my_company.com"
Dizer que a nova ssh-key foi nomeada “work_rsa”, agora copie o conteúdo do novo arquivo de chave pública gerado (work_rsa.pub neste exemplo) e cole-o na página de configuração da conta work_rsa do GitHub como descrito na página de ajuda do GitHub.
Modifique o arquivo de configuração ssh ( ~/.ssh/config)
Abra o arquivo de configuração em um editor de texto (crie-o se não houver um no ~/.ssh ainda) e adicione-lhe o seguinte:
# 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
Clonar o repo do projeto de trabalho (com um endereço ligeiramente diferente)
Para clonar o repo do projeto de trabalho usando a nova chave ssh precisamos ajustar um pouco o endereço ssh do repo. A url do host precisa corresponder ao Host definido no arquivo de configuração ssh do último passo, ou seja, onde no endereço há github.com
, substitua-o por github.com-work
.
E.g., com o seguinte endereço privado repo ssh que obtemos do GitHub:
[email protected]:/.git
Precisamos de ajustar o seu endereço assim antes de podermos git clone
it:
[email protected]:/.git
$ git clone [email protected]:/.git
Modificar o pacote.json para instalar as dependências privadas do repo
No projeto que clonou localmente, encontre as dependências privadas do repo em seu pacote.json e fazer a mesma modificação em seu endereço repo como no passo 3 (eu não submeteria estas modificações já que quebra tudo para outras pessoas que também estão trabalhando neste projeto):
"dependencies": {
"private-module": "git+ssh://[email protected]/.git
...
}
* Pode ser necessário primeiro fazer uma instalação manual para um dos módulos privados no terminal:
$ npm install git+ssh://[email protected]/
Para que os repos privados sejam reconhecidos no ssh known_hosts
e possam ser acessados durante npm instalando as dependências do projeto.