Várias chaves SSH para contas diferentes no Github ou Gitlab

Às vezes, você precisa de mais contas do que uma para acessar o Github ou Gitlab e ferramentas semelhantes. Por exemplo, você pode ter uma conta para seus projetos em casa e uma segunda conta para sua empresa.

Caso 1: várias contas no Github

Crie chaves SSH com nomes diferentes

$ ssh-keygen -t rsa -C "your_name@home_email.com"

Quando você vê esta mensagem

Generating public/private rsa key pair. 
Enter file in which to save the key (/home/user_name/.ssh/id_rsa):

Insira um nome exclusivo, por exemplo:

id_rsa_home

Em seguida, você será solicitado a inserir uma senha longa.

Então, você terá criado uma chave SSH para sua conta doméstica, agora você pode gerar uma chave SSH para sua conta corporativa.

Chame o gerador de chave SSH novamente com um segundo e-mail.

$ ssh-keygen -t rsa -C "your_name@company_email.com"

Digite o nome do arquivo

id_rsa_company

Após todas as etapas, você pode verificar se todas as chaves foram criadas.

$ ls ~/.ssh

Você deve ver uma lista de arquivos semelhante:

id_rsa_home  id_rsa_company  id_rsa_home.pub  id_rsa_company.pub

Agora você precisa de um arquivo de configuração para organizar essas chaves.

$ cd ~/.ssh/
$ touch config

$ nano config

Adicionar ao arquivo de configuração:

# Home account
Host home.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_home

# Company account
Host company.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

Em seguida, você excluirá as chaves em cache

$ ssh-add -D

Se você vir uma mensagem

Could not open a connection to your authentication agent.

Em seguida, digite:

eval `ssh-agent -s`

e tente novamente o comando anterior.

Em seguida, você pode verificar se suas chaves foram adicionadas:

$ ssh-add -l
2048 d4:e0:39:e1:bf:6f:e3:26:14:6b:26:73:4e:b4:53:83 /home/user/.ssh/id_rsa_home (RSA)
2048 7a:32:06:3f:3d:6c:f4:a1:d4:65:13:64:a4:ed:1d:63 /home/mateusz/.ssh/id_rsa_company (RSA)

Se você não tiver nenhuma entrada, deverá adicionar suas chaves

ssh-add ~/.ssh/id_rsa_company
ssh
-add ~/.ssh/id_rsa_home

Agora você pode verificar a conexão

$ ssh -T git@home.github.com
Hi home_user! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git
@work.github.com
Hi company_user! You'
ve successfully authenticated, but GitHub does not provide shell access.

Nota! Verifique o último parágrafo desta dica.

Caso 2: conta no Github e Gitlab

Este é um caso muito semelhante ao anterior. Não vou descrever passo a passo, porque todos os passos são iguais. Vou adicionar apenas o arquivo de configuração de exemplo.

Por exemplo, você tem uma conta própria para trabalhos domésticos e uma conta corporativa no gitlab.

# GITLAB
Host gitlab.company_url.com
HostName gitlab.company_url.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# GITHUB
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_home

As conexões de teste

$ ssh -T git@gitlab.company_url.com
Welcome to GitLab, CompanyUser!

$ ssh
-T git@github.com
Hi home_user! You've successfully authenticated, but GitHub does not provide shell access.

Como você provavelmente viu, o prefixo no nome do host não é necessário.

Você pode precisar definir os detalhes do usuário git config para qualquer projeto.

É necessário distinguir suas contas.

$ cd ~/home_project
$ git config user
.name "home_user"
$ git config user
.email "your_name@home_email.com"