Se você chegou até aqui, é provável que tenha se deparado com um problema muito comum para vários devs: o de precisar utilizar duas contas do GitHub na mesma máquina utilizando chaves SSH.
Geralmente essa demanda surge quando temos uma conta pessoal e uma conta vinculada à empresa em que trabalhamos na plataforma, então ATENÇÃO: só faça se a sua empresa autorizar ter sua conta pessoal na máquina deles ou se eles autorizarem você a ter o projeto deles em sua máquina pessoal.
Nota 1: Vou partir do pressuposto de que você possui uma conta principal (por exemplo, sua conta pessoal) e já utiliza a chave SSH no dia-a-dia e deseja de vez em quando utilizar outra conta em um diretório separado, sem misturar as coisas. Se você deseja utilizar dessa forma, aqui é o lugar certo.
Obs: imagino também que já tenha o Git instalado, se não, baixe aqui e só depois prossiga com o tutorial.
Nota 2: Existem outros tutoriais disponíveis, sobretudo em inglês e voltados para Linux. Portanto vou abordar o Windows e comentar sobre um problema nesse OS e como uma resposta no Stack Overflow me ajudou a resolver. No fim das contas é um condensado de informações já disponíveis que espero que te ajude! Não quero reinventar a roda.
Passo 1: Criar um novo par de chaves SSH
Sempre utilizo a expressão par de chaves, pois ao gerar uma nova chave temos a versão pública e a versão privada dessa chave.
Para criar um novo par de chaves SSH, vá até a pasta .ssh (no Windows ela fica em C:\Users\seu_usuario\.ssh
) e dentro dela abra um novo terminal Git Bash:
Como terminal aberto, você rodará o seguinte comando:
ssh-keygen -t ed25519 -C "seu_email@provedor.com" -f nome_da_chave
Substitua seu_email@provedor.com pelo seu e-mail e nome_da_chave pelo o nome que você prefira para identificar a chave.
Lembra que eu comentei que parto do pressuposto de que você já possui um par de chaves cadastrada em sua máquina? Sem a parte final do comando que citei acima, ele geraria um par de chaves com o nome de
id_ed25519
e substituiria as suas chaves originais caso você tenha gerado sem um nome personalizado da primeira vez. Portanto o-f nome_da_chave
é importante nesse contexto para garantir uma identificação diferente e não apagar suas chaves iniciais.
Ao rodar o comando, será solicitado que você digite uma senha para sua chave SSH e depois confirmá-la. Caso opte por não incluir uma senha, apenas prossiga sem digitar nada e aperte Enter nas duas oportunidades.
Enter passphrase (empty for no passphrase):
E depois:
Enter same passphrase again:
Se você gerou uma senha para seu par de chaves, convém adicioná-las ao ssh-agent. Ele vai gerenciar sua senha e deixar suas chaves prontas para uso sem que você precise ficar digitando sempre a sua senha. Se não colocou senha, apenas ignore esse passo.
Para colocar suas chaves no ssh-agente, primeiro você tem que iniciá-lo com o seguinte comando:
eval "$(ssh-agent -s)"
E depois adicionar sua chave:
ssh-add ~/.ssh/nome_da_chave
Substitua nome_da_chave pela identificação da chave que você criou anteriormente.
No meu caso, eu não criei uma senha, pois fiz no meu computador pessoal, então não adicionei ao ssh-agent, mas é aquela conversa: o seguro morreu de velho.
Passo 2: Adicione a chave pública ao GitHub
Você pode copiar a chave pública de duas maneiras:
- Abrindo a chave com o final .pub em algum editor de texto e copiando todo o conteúdo com um simples Ctrl+C; ou
- Redigindo o seguinte comando (se estiver usando Windows e o Git Bash):
clip <~/.ssh/nome_da_chave.pub
Para outros OS, veja aqui como copiar a chave via terminal.
Com a chave copiada, vá até o seu perfil no GitHub, entre nas configurações e depois em SSH and GPG Keys. Agora clique em Add new SSH Key e cole sua chave pública no campo Key. Se quiser, pode dar um nome para identificar a chave em Title. Depois disso é só confirmar e sua chave já está pronta para uso!
Passo 3: Configurar corretamente os perfis em sua máquina
Dentro da pasta .ssh deve existir um arquivo chamado config. Caso ele não exista, você pode criá-lo. Com o Git Bash aberto na pasta .ssh, digite o seguinte comando:
touch config
E para editar o arquivo, abra o em um editor de texto ou use um editor diretamente no terminal.
Esse arquivo é o que fará o elo entre as suas chaves e o comando que você faz ao clonar um repositório em sua máquina. Ao visualizar o que há dentro do arquivo config, ele deve possuir os seguintes itens:
Host github.com HostName github.com IdentityFile ~/.ssh/nome_da_chave
Porém como estamos falando de duas contas na mesma máquina, ele deverá possuir duas configurações diferentes. Para fazer isso, você precisa compreender os termos que estão ali no arquivo.
- Host: aqui você define para qual Host ou Hosts a configuração vai se aplicar. Em outras palavras: você tá criando uma identificação para determinado Host;
- HostName: especifica o nome real do Host, o endereço ao qual você irá se conectar;
- IdentityFile: especifica qual arquivo deverá ser lido ao se conectar ao Host.
Dito isto, vamos especificar apenas Host e IdentityFile, enquanto para HostName usaremos sempre github.com, já que é lá que estão os repositórios.
Se você já tinha chaves SSH e utilizava GitHub normalmente em sua máquina, sugiro que o seu Host dessa primeira chave continue como github.com. Caso seja alterado, você precisará atualizar a origin de todos os repositórios já clonados anteriormente.
Sendo assim, o seu arquivo deve ficar assim:
# sua primeira chave Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 # chave que você criou seguindo esse artigo Host github.com-trabalho HostName github.com IdentityFile ~/.ssh/nome_da_chave
Percebam que para o segundo Host, o que fiz foi adicionar -trabalho
após github.com na primeira linha e alterei o caminho para a nova chave criada.
Seja livre para alterar da maneira que achar necessário. Você pode incluir o nome que quiser ali.
A primeira parte está concluída, e agora vamos configurar o nosso arquivo .gitconfig. É nele que estão as configurações globais da nossa conta. Se tiver dúvidas de como seu Git está configurado, com o terminal aberto, digite o seguinte comando:
git config --list
Ele deverá retornar uma lista com algumas configurações, e as que importam para nós agora são user.email e user.name.
user.name=Seu Nome user.email=seu_email@provedor.com
Se ele retornar pelo menos o user.email, significa que essa é a conta que está cadastrada globalmente em sua máquina. O que vamos fazer agora é criar uma verificação para esses dados. Basicamente ele vai funcionar assim:
- Se você clonar qualquer repositório em sua máquina, ele vai pegar as configurações globais;
- Porém se você clonar um repositório dentro de um diretório/pasta específico, ele irá utilizar as configurações da sua segunda conta e sua segunda chave SSH.
O arquivo .gitconfig fica no seguinte endereço: C:\Users\seu_usuario\.gitconfig
. Abra-o em algum editor de texto. Ele deverá se parecido com esse:
[user] email = seu_email@provedor.com name = Seu Nome
O que faremos agora é criar uma verificar utilizando o includeIf, que nada mais é do que um inclua isso SE... . Dessa forma, vamos criar a seguinte regra: se for dentro da pasta tal, leia esse .gitconfig.
Portanto seu arquivo deverá ficar assim:
[user] email = seu_email@provedor.com name = Seu Nome [includeIf "gitdir/i:C:/nome_da_pasta/"] path = C:/nome_da_pasta/.gitconfig
Repararam que inclui um /i antes de :C:? Pois bem, ao incluir o /i, você está garantindo que ao ler a rota, sua regra será case insensitive, em outras palavras: ela vai ignorar se o texto está em caixa alta ou não. Como no Windows o padrão é que os drives contenham letras maiúsculas, você garante que o script conseguirá ser lido. Consegui resolver isso com ajuda do bom e velho Stack Overflow.
Pois bem, agora o ajuste final: Você deverá criar a pasta em que guardará todos os repositórios que serão clonados com seu novo par de chaves SSH. Se repararem bem, no meu caso eu criei a pasta diretamente no drive C, mas você pode fazer como bem entender.
Para finalizar, crie um arquivo .gitconfig dentro dessa pasta, e dentro dele coloque as configurações da sua segunda conta do GitHub. O arquivo deve ficar assim:
[user] email = seu_email@provedor.com name = Seu Nome
Isso garantirá que seus commits estejam sempre vinculados à conta correta.
Passo 4: clone um repositório
Para clonar um repositório, vamos relembrar o Host citado mais atrás. Lembre-se dele ao clonar os repositórios para sua máquina.
Entre na pasta que você criou o arquivo .gitconfig, abra o Git Bash e clone um repositório fazendo o seguinte: adicione o nome que você criou para seu Host logo após a @ e antes dos dois ponts :, como no exemplo abaixo:
git clone git@{seu-novo-host}:{usuario}/{repositorio}.git
Substitua seu-novo-host pelo Host criado no passo 3. Lembre-se sempre de fazer essa pequena alteração ao clonar os repositórios para essa pasta específica. E pronto! A partir de agora você não terá nenhum tipo de problema com ao criar um novo commit e um novo push.
Conclusão
Como já citei anteriormente, sei que existem outros tutoriais, sobretudo em inglês, que abordam a mesma questão. Mas optei por trazer uma versão em português mais longa tentando abordar o funcionamento de cada passo e espero que isso ajude outras pessoas a entenderem melhor o funcionamento do Git e suas pequenas particularidades.
Espero que tenha resolvido seu problema. Me conte nos comentários!
Referências
- https://stackoverflow.com/questions/69988240/includeif-is-not-working-on-git-for-windows
- https://medium.com/@pinglinh/how-to-have-2-github-accounts-on-one-machine-windows-69b5b4c5b14e
- https://gist.github.com/rahularity/86da20fe3858e6b311de068201d279e3
- https://dev.to/fabriciadiniz/como-utilizar-duas-contas-do-github-no-mesmo-computador-windows-2348
- https://dev.to/devgirls/guia-gerenciando-2-ssh-keys-do-github-no-seu-pc-apm
- https://dev.to/giovanisleite/como-configurar-chaves-ssh-para-duas-ou-mais-contas-no-github-5de9
- https://medium.com/@timleland/copy-ssh-key-to-clipboard-183dbf6d2a39
- https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/
- https://dev.to/dxwebster/como-conectar-ao-github-com-chaves-ssh-1i41
Top comments (39)
Foda pacaraio primo, continue com a produção de conteúdo!
Muito bom, ótimas dicas, valeu!
Mt obg mano, tava precisando disso
conteúdo muito bom
Conteúdo ficou muito massa
muito foda primo!
Brabo demais o conteúdo!
Tu é pica meu parceiro, continue assim
Bom demais!
top de mais