Se você tem conta pessoal e de trabalho no Git (ou até freelas), já deve ter sofrido com o SSH misturando as chaves.
A boa notícia é que dá pra resolver de dois jeitos: automático por diretório ou via alias de host.
Automático por diretório (requer OpenSSH 7.3+)
Essa é a forma que eu mais gosto. Só de estar dentro da pasta do projeto, o SSH já sabe qual chave usar.
Mas atenção: funciona apenas no OpenSSH 7.3 ou superior e você precisa separar os projetos por pastas (pessoais em uma e profissionais em outra, por exemplo). Verifique sua versão do SSH com:
ssh -V Agora vamos a estrutura de pastas, essa parte é fundamental, precisamos de uma pasta para cada chave, atualmente eu uso algo como:
projects/ #vai usar a chave pessoal - blog - estudos - urubu_do_pix - work/ # daqui pra frente vai usar a chave do trabalho - projectA - projectB Ou seja, tudo do trabalho fica na pasta ‘work’. Vamos fazer com que o SSH use uma chave pra todos os lugares e troque apenas quando estiver na ‘work’.
Edite o arquivo de configuração no do SSH que fica em ~/.ssh/config:
# Configuração padrão, usa a chave pessoal Host github.com AddKeysToAgent yes User git # UseKeychain yes # (se estiver no macOS) IdentitiesOnly yes # Chave para projetos do trabalho Match exec "[[ $PWD == /home/tulio/projects/work* ]]" IdentityFile ~/.ssh/work_key Match all IdentityFile ~/.ssh/my_key Lembre de trocar os caminhos, tanto das chaves quanto da pasta work.
Com isso, se você fizer um clone, push ou pull em qualquer lugar diferente da pasta ‘work’, ele vai usar a chave pessoal. Na pasta ‘work’, usa a chave do trabalho. Simples assim.
Alternativa: usando aliases de host
Se a sua versão do SSH não suporta Match exec, dá pra resolver usando aliases.
Nesse caso você cria “atalhos” e aponta o git remote para eles.
Edite o ~/.ssh/config:
# Conta pessoal Host github.com HostName github.com User git IdentityFile ~/.ssh/my_key # Conta do trabalho Host work.github.com HostName github.com User git IdentityFile ~/.ssh/work_key Aqui você pode ser criativo com o alias, pode usar até algo mais curto, como "w" apenas, sem o github.com, basta lembrar que na hora de clonar você terá que colonar com "w" no lugar do "github.com" (git@w:org/project.git)
E na hora do clone basta você adicionar work antes do github, exemplo:
git clone git@work.github.com:... Caso ja tenha o projeto clonado basta trocar a URL da origin, você pode fazer assim:
Veja a URL atual do repositorio:
git remote -v Copie a URL e adicione o work na frente e troque com:
git remote set-url origin git@work.github.com:... Fechando
Hoje eu uso o esquema automático por diretório porque me poupa tempo e evita erro, mas a versão com alias funciona em qualquer lugar e é à prova de falhas.
De qualquer jeito, o resultado é o mesmo: nunca mais push falhando por causa da chave errada.
Você pode repetir a configuração para usar várias chaves, eu utilizei apenas duas para simplificar.

Top comments (0)