Configure SSH para o Bitbucket, GitLab ou GitHub
Crie uma conexão confiável entre seu dispositivo e o servidor remoto do repositório Git.
Introdução
Criar uma Chave SSH
Antes de qualquer coisa, precisamos e queremos criar nossa chave SSH.
Essa etapa pode ser repetida quantas vezes você preferir.
1- Abra seu terminal e crie uma pasta chamada .ssh
mkdir .ssh
2- Acesse a pasta .ssh
que acabamos de criar:
cd ~/.ssh
3- Gere uma chave SSH com o comando:
⚠️ Substitua no comando abaixo:
- "example@simplescloud.io" para um email de sua preferência
- bitbucket_simplescloud_account_example para o nome da chave SSH de sua preferênciaNão preencha nenhuma pergunta solicitada no terminal → apenas pressione Enter
ssh-keygen -t rsa -b 4096 -C "example@simplescloud.io" -f bitbucket_simplescloud_account_example
4- Em nosso exemplo, podemos ver que nesse momento foram gerados dois arquivos:
bitbucket_simplescloud_account_example
→ chave privada e que não deve ser compartilhada com ninguémbitbucket_simplescloud_account_example.pub
→ chave pública que precisaremos para os próximos passos
Então é hora de copiarmos o conteúdo de nossa chave pública, você pode fazer isso de várias formas, mas prefiro usar o comando copyfile
para isso.
copyfile
em nosso artigo 👉 aquiEntão acesse ~/.ssh
→ copie o conteúdo da sua chave pública bitbucket_simplescloud_account_example.pub
com o comando copyfile
copyfile ~/.ssh/bitbucket_simplescloud_account_example.pub
Configurando o SSH no Bitbucket
1- Acesse sua conta do Bitbucket
→ canto superior direito na sua foto ou avatar → Personal Settings
→ SSH Keys
→ Add Key
2- No campo Label
defina um nome fácil de você identificar e no campo Key
cole o conteúdo da sua chave pública copiada → Add Key
Configurando o SSH no GitLab
1- Acesse sua conta do GitLab
→ Edit Profile
→ SSH Keys
e cole o conteúdo da sua chave pública → defina um nome de sua preferência → não preencha o campo de data → clique em Add key
Configurando o SSH no GitHub
1- Acesse sua conta do GitHub
→ canto superior direito na sua foto ou avatar → Settings
→ SSH and GPG Keys
→ New SSH Key
2- No campo Title
defina um nome fácil de você identificar, no campo Key Type
deixe como Authentication Key
e no campo Key
cole o conteúdo da sua chave pública copiada → Add SSH Key
Múltiplas Chaves SSH para Múltiplas Contas
Agora que já vimos como gerar chaves SSH e adiciona-las nas hospedagens de controle de versões git de sua preferência, é muito provável que em algum momento, você seja adicionado em um projeto, queira criar uma conta, clonar o repositório e esmagar algum código.
Porém não é tão fácil como parece, para a maioria dos repositórios git como GitLab, GitHub e Bitbucket, acontecerá uma mensagem de erro parecida com:
Essa é uma mensagem um pouco frustrante, pois inicialmente parece fazer sentido querermos usar nossa mesma chave SSH que já temos para uma outra conta recém-criada. Mas não é assim que funciona, explicando melhor essa mensagem diz que sua chave SSH já está adicionada em outra conta, então na prática não podemos "reaproveitar" a mesma chave SSH que você gerou e adicionou na conta Bitbucket pessoal como também em uma segunda conta Bitibucket que você tenha criado por exemplo.
Felizmente há uma solução simples e se aplica da mesma forma para qualquer serviço de hospedagem de controle de versão como GitLab
e GitHub
, mas para não ficar repetitivo, usarei um passo a passo com o Bitbucket
.
Gere várias chaves SSH
Se não podemos usar a mesma chave SSH em várias contas, a solução então é ter várias chaves SSH diferentes. Para esse exemplo, vamos criar:
Chave SSH Pessoal
Chave SSH para o Projeto do Cliente
Adicione as chaves SSH ao Agente
Aqui começam as dicas legais, para fazer uso das chaves SSH recém-criadas, precisamos adicioná-las ao ssh-agent
que nada mais é do que um programa nativo que contém as chaves privadas usadas para a autenticação pública.
O ssh-agent
provavelmente já está sendo executado em segundo plano no seu sistema operacional, mas por precaução vamos verificar com o comando:
eval "$(ssh-agent -s)"
E adicionando novas chaves SSH usando o comando ssh-add
.
ssh-add ~/.ssh/key_name_personal
ssh-add ~/.ssh/key_name_client
Torne as alterações permanentes
Estamos caminhando bem, mas você notará que os passos acima se tornam repetitivos cada vez que abrir o terminal, vamos melhorar isso tornando essas alterações permanentes.
Zsh Shell
e nossos passos serão através dele, veja mais detalhes sobre o Zsh Shell
em nosso artigo 👉 aqui1- Em seu terminal digite o comando:
sudo nano ~/.zshrc
2- Vá para o final do arquivo de configuração do Zsh Shell
e adicione os comandos que estávamos fazendo manualmente a cada vez que abríamos o terminal + &> /dev/null
ao final para evitar algum output e "travar" a exibição inicial do terminal, ou seja:
eval "$(ssh-agent -s)" &> /dev/null
ssh-add ~/.ssh/bitbucket_personal_account_wsl2 &> /dev/null
ssh-add ~/.ssh/bitbucket_simplescloud_account_wsl2 &> /dev/null
Pressione Ctrl + X
→ Y
→ Enter
para salvar as alterações
Configure o SSH
Estamos quase lá, como etapa final, aqui no arquivo de configuração do SSH é que está toda a mágica! Precisamos criar um arquivo de configuração (se você ainda não o tiver) e criar os aliases
ou "apelidos" personalizados que irão impor o uso ou uma chave SSH específica para um determinado host. Então vamos fazer isso!
1- Digite o comando:
sudo nano ~/.ssh/config
2- Edite o arquivo conforme o exemplo. Lembre-se de pressionar Ctrl + X
→ Y
→ Enter
para salvar as alterações
Host bitbucket-personal.org
HostName bitbucket.org
User git
IdentityFile ~/.ssh/bitbucket_personal_account_wsl2
IdentitiesOnly yes
Host bitbucket-simplescloud.org
HostName bitbucket.org
User git
IdentityFile ~/.ssh/bitbucket_simplescloud_account_wsl2
IdentitiesOnly yes
De agora em diante, toda vez que você clonar um repositório de conta do cliente, simplesmente substitua bitbucket.com
por bitbucket-client
, por exemplo:
❌ git clone git@bitbucket.org:client/project.git
✅ git clone git@bitbucket-simplescloud.org:client/project.git
Ao fazer isso, você está ignorando uma resolução de chave pública padrão e apontando explicitamente ssh-agent
para sempre resolver a conexão bitbucket-client.org
usando a ~/.ssh/bitbucket_simplescloud_account_wsl2
em nosso exemplo.
Altere a URL upstream do repositório já existente
Você pode estar se perguntando o que fazer com os repositórios já existentes. Clonar todos eles um por um não parece divertido. Não é e tem solução!
Para alterar uma URL do repositório atualmente existente, use o comando git remote set-url
, por exemplo:
git remote set-url origin git@bitbucket-simplescloud.org:client/project.git
Testando a Conexão
Além do comando:
eval "$(ssh-agent -s)"
Já citado para verificar se o ssh-agent
está em execução, outro comando que pode ser muito útil é o:
ssh -T git@bitbucket-simplescloud.org
Observe que no comando já estamos usando o bitbucket-simplescloud.org
que é o alias
ou "apelido" configurado no arquivo ~/.ssh/config
. Desta forma conseguimos testar que a conexão foi realizada com sucesso.
Conclusão
Esta solução resolveu o meu problema e atendeu bem.