Configurando SSH key no WSL / Linux
Tags: github, linux
Published: 2022-04-28 05:45:48

## Introdução

Primeiramente gostaria de dedicar este artigo ao [@rocketseat](https://www.linkedin.com/school/rocketseat/) que me apresentou esse conteúdo através do incrível programa #discover no módulo GitHub. Obrigado por disponibilizar uma plataforma com excelentes conteúdos e de forma totalmente gratuita!

O artigo foi dividido em duas partes, sendo a primeira os processos realizados em nosso **terminal**, e a segunda feita no próprio site do **GitHub**. 

Há não muito tempo atrás costumava manipular meus repositórios através do HTTPS e por mais que seja uma forma fácil ao instalar programas ou simples clones, quando começamos a realmente utilizar as funções do git e necessitamos de *git pull*, *push* entre outros, lidar com esse repositório com o HTTPS não é a melhor e nem a mais segura durante esse processo, ainda mais quando se trata de um repositório privado.

![Trecho da página do GitHub que mostra como clonar um repositório com SSH](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/olgzsq0gb3pulsj1kyx4.png)

  

E como recentemente o GitHub deixou de utilizar a [senha como fator de autenticação](https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/) nos repositórios, gerar um Token de Acesso para cada vez que for trabalhar com um repositório final é de alto risco já que estes liberam total acesso para a sua conta, logo uma melhor solução seria criar [chaves SSH](https://jumpcloud.com/blog/what-are-ssh-keys) e através de um processo simples poder futuramente manipular estes repositórios com bem mais segurança e privacidade.

--- 

## Terminal

Bem, antes de tudo tenha certeza de que você possui instalado em seu computador alguns programas necessários, como o gerador de SSH (*openssh-client para **Debian**/ **Ubuntu** ou *plan9port* para Aarch). Caso não possua (ou queira atualizar) é só digitar os comandos:

**Debian**/ **Ubuntu** /**Kali:**

```bash
apt-get install openssh-client
```

**Arch**:

```bash
yay -S openssh
```
ou
```bash
$ pacman -S openssh
```

para outros OS conferir aqui:
[OpenSSH | Docs (crp.to)](https://docs.crp.to/openssh.html#prerequisites)


Após isso, o que temos que fazer é usar as ferramentas listadas acima para criar uma chave SSH para que torne possível conectar nossos repositórios com o dispositivo que estamos agora configurando.

Para então gerar esta chave, precisamos rodar o seguinte comando:

`ssh-keygen -t ed25519 -C "seu_email_do_github*@exemplo.com*"`

- -t indica que será criado um arquivo.
- ed25519 - é o padrão de segurança utilizado
- -C mostra que o email colocado a seguir será usado como identificador.

Mais informações sobre o comando utilizado está no site oficial do OpenSSH

[https://www.openssh.com/txt/release-8.2](https://www.openssh.com/txt/release-8.2)

E então apenas confirme **sem digitar nada** as solicitações que o keygen irá fazer, e então você deverá obter uma tela parecida com esta:

![Mensagem no Terminal que mostra o SHA indicando que foi concluido com sucesso](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57t3kbi2j0hjjcvf7oiu.png)

e então verá que foram criado dois novos arquivos na pasta `.ssh`, com o comando abaixo é possível confirmar isso:

![Descritivo dos itens dentro da pasta .ssh](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ym6ha5szjux325ofgjm7.png)
 

Agora iremos adicionar esta nova chave gerada ao nosso gerenciador de chaves (`ssh-agent`), portanto recomendo sair do shell que você está utilizando (*zsh*, *fish*, ...) e volte para **bash**, simplesmente digitando o comando

```bash
bash
```

Esta etapa é necessária pois nem toda interface shell suporta comandos de bash (como eval ), agora temos que ter certeza de que o *ssh-agent* (Gerenciador de chaves) esteja rodando certinho. Para conferir, digitamos:

```bash
eval "$(ssh-agent -s)"
```

*(sem Super Usuário a.k.a **sudo**)*
 e deverá mostrar algo semelhante como: `Agent pid 5956`
 *O número acima não é importante e é gerado um novo a cada vez que você realiza este comando.

![Mensagem no Terminal que mostra a resposta do comando eval](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xmlm6vevk1trsp4vf2f0.png)
 

e para finalmente adicionarmos à SSH gerada o nosso gerenciador basta digitar:

```bash
ssh-add ~/.ssh/id_ed25519
```

 *note que o id_ed25519 poderá ser diferente caso tenha gerado sua chave com outro sistema de segurança (como ecdsa), então para não ter erro é só ver o resultado do ls que fizemos acima e inserir o nome do arquivo gerado pelo ssh-keygen*

![Imagem que indica qual arquivo que deve selecionar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b796g22evt4s891kigcp.png)
 

Com isso feito, você deverá ver uma mensagem mostrando que a identidade foi adicionada. 


![Mensagem que mostra que foi feito com sucesso a operação](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6vmn0h7i209268plbmka.png)
 
 

Ótimo!! Na parte do terminal terminamos (desculpe o trocadilho) e o que nos resta agora é partir para o site do GitHub adicionar uma outra chave SSH no sistema deles (e assim identificar nosso computador).

---

## GitHub

Após fazer o login e estar na página principal, clicamos no nosso ícone no canto superior direito **(1)** 
e depois ir na aba Settings (Configuração) **(2)**

![Imagem que mostra 2 setas que indicam onde deve-se clicar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ikqti5z45n5hwi1kuslr.png)
 

Com isso feito, é só seguir para a barra lateral e clicar em **SSH and GPG Keys**
 (Chaves SSH e GPG)

![Barra lateral mostrando qual a opção certa deve selecionar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2pr2q0s65fver1qnndm8.png)
 

E terá um botão indicando para adicionar uma *nova Chave SSH*

![Indicativo que mostra uma seta vermelha apontando para um botão escrito "new SHH KEY"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/djbfvsuvqmrtm7pobkil.png)
 

Agora basta dar título **(1)** para identificar o seu dispositivo e na parte Key, deverá inserir o texto que está dentro do segundo arquivo gerado pelo ssh-keygen, que terá uma extensão .pub (que no nosso caso é id_ed25519.pub)

No terminal para acessar basta digitar `cat ~/.ssh/id_ed25519.pub` e irá mostrar ali mesmo o texto contigo, copie tudo isso e coloque onde está indicado como KEY na página do GitHub * **(2)** e por fim clicar em Add SSH Key (Adicionar Chave SSH)* **(3)**.

![3 balões que mostram com uma seta o Titulo, um campo escrito KEY e por fim um botão verde escrito "Add SSH Key"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncovr4icl8hizioei6ck.png)
 

e _voilà_!🎉 Sua chave SSH já está configurada no GitHub e poderá trazer repositórios para sua máquina sem nenhum problema! 

---

Caso tenha sido útil este artigo por favor dê um like e compartilhe para quem não sabia deste processo tão fundamental e simples ao mesmo tempo.

Muito obrigado pela sua atenção e te vejo na próxima!


---

**Fontes:**
- GitHub usará Access Token como autenticação: [https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/](https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/)
- O que são Chaves SSH? : [https://jumpcloud.com/blog/what-are-ssh-keys](https://jumpcloud.com/blog/what-are-ssh-keys)
- Checando Chaves SSH existentes | GitHub: [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys)
- Gerando uma nova chave SSH e adicionando ao ssh-agent | GitHub: [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)
- Alternativas caso SSH-agent não funcione | Command not found :: [https://command-not-found.com/ssh-agent](https://command-not-found.com/ssh-agent)
- Instalando OpenSSH nos Sistemas Operacionais | OpenSSH :: [https://docs.crp.to/openssh.html#prerequisites](https://docs.crp.to/openssh.html#prerequisites)
- Notas da última atualização do OpenSSH | OpenSSH: [(https://www.openssh.com/txt/release-8.2)](https://www.openssh.com/txt/release-8.2)