Configure SSH para o Bitbucket, GitLab ou GitHub

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

Há muitas hospedagens disponíveis para controle de versão como GitLab, GitHub e Bitbucket, todos possuem prós e contras, não abordarei essas diferenças neste artigo, mas focarei na configuração das chaves SSH para eles. Também abordarei como adicionar várias chaves SSH para várias contas diferentes.

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

image.png

2- Acesse a pasta .ssh que acabamos de criar:

cd ~/.ssh

image.png

3- Gere uma chave SSH com o comando:

⚠️ Substitua no comando abaixo:
- "" para um email de sua preferência
- bitbucket_simplescloud_account_example para o nome da chave SSH de sua preferência

Nã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

image.png

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ém

  • bitbucket_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.

💡
Dica: veja como habilitar o plugin copyfile em nosso artigo 👉 aqui

Entã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

image.png

Pronto! Você já criou sua chave SSH e está com o conteúdo de sua chave pública copiada, agora falta apenas colar ela na conta da hospedagem de controle de versão git de sua preferência, embora o conceito seja o mesmo para todas, pode ser que algumas telas sejam diferentes de uma para outra, então passaremos por alguns exemplos.

Configurando o SSH no Bitbucket

1- Acesse sua conta do Bitbucket → canto superior direito na sua foto ou avatar → Personal SettingsSSH KeysAdd Key

image.png

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

image.png


Configurando o SSH no GitLab

1- Acesse sua conta do GitLabEdit ProfileSSH 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

image.png


Configurando o SSH no GitHub

1- Acesse sua conta do GitHub → canto superior direito na sua foto ou avatar → SettingsSSH and GPG KeysNew SSH Key

image.png

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

image.png


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:

"Someone has already added that SSH key", ou traduzindo, "Alguém já adicionou essa chave SSH"

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

Sem novidades até aqui, basta seguir os passos iniciais deste artigo e gerar chaves SSH com nomes diferentes!

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)"

image.png

E adicionando novas chaves SSH usando o comando ssh-add.

Lembre-se de substituir alguns valores do exemplo abaixo para valores reais que você usa.
ssh-add ~/.ssh/key_name_personal
ssh-add ~/.ssh/key_name_client

image.png


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.

💡
Dica: uso o Zsh Shell e nossos passos serão através dele, veja mais detalhes sobre o Zsh Shell em nosso artigo 👉 aqui

1- Em seu terminal digite o comando:

sudo nano ~/.zshrc

image.png

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 + XYEnter para salvar as alterações

image.png


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

image.png

2- Edite o arquivo conforme o exemplo. Lembre-se de pressionar Ctrl + XYEnter 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.

Sua chave padrão funcionará como antes. Truque legal, não é? 🥳

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

image.png

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.

Espero que essas informações tenham sido úteis para você!