Article image
André Nascimento
André Nascimento06/02/2023 16:47
Compartilhe

Como usar mais de uma conta no GitHub no mesmo sistema, usando chaves SSH [Ubuntu]

  • #Linux
  • #GitHub
  • #Git

Normalmente, temos uma máquina para trabalhar e uma para usar nos momentos em que não se trabalha. E enquanto as duas estão ok, seguimos suave na nave... Mas e quando dá ruim na sua máquina pessoal e não dá para consertar em tempo hábil, como que a gente faz para continuar? Dá pra usar meu perfil pessoal do github sem misturar com o de trabalho?

Spoiler: dá. Só seguir lendo

Configurando diferentes emails

Quando o Git vai assinar um commit ele primeiro procura as informações dentro da pasta `.git` dentro do projeto e caso não tenha nada definido localmente, ele procura pela configuração global que fica num arquivo chamado `.gitconfig` na pasta raiz do usuário.

E é aqui que iremos fazer uma jogada para o Git ler o que nós queremos que ele leia. Eu costumo ter uma estrutura de pastas da seguinte forma:

~/Documentos/Pessoal/java # meus projetos pessoais
~/Documentos/GitHub # projetos de trabalho

Como é um padrão bem simples, fica fácil de falar para o Git o seguinte:

-  Se estiver na pasta java use meu email pessoal

-  Se estiver na pasta GitHub use meu email de trabalho

E aí para definir isso, crie 2 arquivos na sua home (~):

.gitconfig-github
.gitconfig-trabalho

E os conteúdos ficam:

# .gitconfig-github

[user]
 email = andresoaresnascimento@pessoal.com.br

E no outro:

# .gitconfig-trabalho

[user]
 email = andresoaresnascimento@trabalho.com.br

Lembrando que aqui estou mostrando só o email, mas outras configurações como aliases específicos para cada conta e qualquer outra coisa, você consegue separar tranquilamente nesses arquivos.

Mas só fazendo isso, ainda não vai funcionar, nós precisamos informar ao Git quando é parar ler um ou outro, para isso nós editaremos o .gitconfig original para ficar assim:

[user]
 name = Andre S Nascimento
[init]
 defaultBranch = main

[includeIf "gitdir:~/Documentos/Pessoal/java/"]
 path = .gitconfig-github
[includeIf "gitdir:~/Documentos/GitHub/"]
 path = .gitconfig-trabalho

Note que eu tenho coisas globais ainda, como meu nome e o branch inicial quando criar. Mas utilizo um includeIf exatamente para quando cair numa opção ou outra, ele adicionar meus dados específicos.

Configurando duas chaves SSH

Agora vamos a segunda parte que é ainda mais importante, afinal de contas, se as chaves não estiverem bem configuradas, você não consegue nem fazer push para o repositório.

Primeiro de tudo, você precisa criar chaves SSH separadas, até para facilitar nessa separação, para isso, é só rodar:

ssh-keygen -t rsa -C "email@pessoal.com.br" -f "id_rsa_pessoal"
ssh-keygen -t rsa -C "email@trabalho.com.br" -f "id_rsa_trabalho"

Ao fazer isso, ele vai criar duas chaves separadas na pasta ~/.ssh, depois basta adicionar na sua máquina usando:

ssh-add ~/.ssh/id_rsa_pessoal
ssh-add ~/.ssh/id_rsa_trabalho

Depois disso precisamos configurar o ssh para também entender quando usar uma chave ou outra. Para isso vamos criar um arquivo `config` dentro da pasta .ssh:

cd ~/.ssh
touch config
code config # você pode usar vi, vim, nano, enfim, editor favorito

Lá dentro do arquivo é só inserir:

# Conta do trabalho
Host github.com 
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_trabalho

# Conta pessoal
Host github.com-pessoal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_pessoal

Ali está como `github`, mas para o `gitlab` é só mudar no `Host` e `Hostname`, você inclusive pode ter diferentes configs de diferentes repositórios remotos no mesmo arquivo.

E aí, sempre que for clonar um repositório, se ele for o pessoal, basta estar na sua pasta de projetos pessoais e editar na url copiada do GitHub para ficar de acordo com o que definimos na estrutura do arquivo config acima:

git clone git@github.com-pessoal:seu_user/repo_name.git

Prontinho, agora sua máquina está configurada para trabalhar com duas contas do Git e assim você não fica misturando usuários e chaves entre coisas pessoais e empresa!

E fazendo o clone pelo terminal, depois a IDE faz todo o processo correto de commit e push.

(baseado no artigo original: https://www.freecodecamp.org/news/manage-multiple-github-accounts-the-ssh-way-2dadc30ccaca/)

Compartilhe
Comentários (3)

tr

thales rocha - 07/02/2023 09:13

Cara, muito útil, era justamente o que tava precisando, valeu!

Francisco Rodrigues
Francisco Rodrigues - 07/02/2023 09:07

Muito bom, era exatamente isso q estava procurando, obrigado!

Matheus Coimbra
Matheus Coimbra - 06/02/2023 20:51

Cara, muito útil, era justamente o que tava precisando, valeu mesmo!