Usando várias SSH keys e diferentes hubs de git na mesma máquina
Published: 2022-05-17 23:36:05

## Introdução e motivação desse post
Tem bastante conteúdo na internet a respeito do do uso de múltiplas chaves ssh, e a maioria mostra uma forma de gerenciamento usando `~/.ssh/config` e a alteração do `git remote ` para que a solução funcione.

Vejam um exemplo disso nesse [post](https://dev.to/williamkoller/autenticacao-em-varias-contas-do-github-usando-ssh-5eom) criado pelo meu amigo [William Koller](https://dev.to/williamkoller).

Particularmente eu não gosto muito dessa solução, porque:

1. me faz ter que alterar em 2 lugares
2. sempre que eu baixar um repositório, devo me atentar em não esquecer de alterar o remote.
3. também não posso esquecer de configurar o `~/.ssh/config`

Antes de falar da solução que fiz, que julgo ser mais simples, vou postar abaixo alguns links que usei nas minhas pesquisas:

- https://betterprogramming.pub/how-to-set-up-multiple-ssh-keys-ae6688f76570
- https://docs.github.com/pt/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account
- https://gist.github.com/jexchan/2351996
- https://gist.github.com/oanhnn/80a89405ab9023894df7
- https://gist.github.com/aprilmintacpineda/f101bf5fd34f1e6664497cf4b9b9345f
- https://gist.github.com/carlosmcevilly/3911775
- https://www.section.io/engineering-education/using-multiple-ssh-keys-for-multiple-github-accounts/
- https://vanthanhtran245.github.io/use-multiple-ssh-key-for-different-git-accounts/
- https://psychowhiz.medium.com/configuring-multiple-ssh-keys-for-git-on-the-same-device-41c29320e5fe
- https://coderwall.com/p/7smjkq/multiple-ssh-keys-for-different-accounts-on-github-or-gitlab
- https://github.com/tw-yshuang/Git_SSH-Account_Switch

## Direto ao ponto
Coloque a function abaixo no seu `~/.bashrc` ou `~/.zshrc`:

{% embed https://gist.github.com/felipemarques/78c78cbe18ebf57cac745822c39a09c6 %}

Com a function acima adicionada, salve o arquivo e dê um reload no seu terminal com: $ `source ~/.zshrc`

Para utilizar, execute: $ `changeSSHKey ~/.ssh/{nomedasuachave}` (chave privada, não é a chave pública)

O resultado seria esse:
![Resultado do uso da function changeSSHKey ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/41sieyc4ork7momi4aik.png)

Então cada vez que eu quiser alterar a chave pra usar outra conta do Github, Gitlab, Bitbucket, ou qualquer outra ssh para servidor git remoto, simplesmente posso chamar a function acima que faz o que poderia também ser feito de forma manual.

Caso ainda você tenha muitas contas pra ficar lembrando sempre qual a chave correta a ser usada, podemos usar um recurso nativo do shell script, o alias:

![alias git-ssh-felipemarques](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/smshssjhn4onwb4bwg9g.png)

E então podemos usar assim: `$ git-ssh-felipemarques`
E o resultado seria:

![resultado do comando: alias git-ssh-felipemarques](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6aa70x99xmdgqvw152oa.png)
 
## Uma alternativa ainda mais simples seria o core.sshCommand

Dentro do repositorio configurar:
`git config core.sshCommand "ssh -i ~/.ssh/yourprivatekey -F /dev/null"
`

## Conclusão
Deve haver ainda outras possibilidades que eu não tenha conhecimento. Qualquer dúvida entre em contato comigo. 

Espero de alguma forma ter contribuído.
Até o próximo post.