<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Forja</title>
    <description>The latest articles on DEV Community by Forja (@forja).</description>
    <link>https://dev.to/forja</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7591%2F212c3939-422b-4790-b695-0bc239491b42.png</url>
      <title>DEV Community: Forja</title>
      <link>https://dev.to/forja</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/forja"/>
    <language>en</language>
    <item>
      <title>Como criar e registrar uma chave SSH para o GitHub</title>
      <dc:creator>Junio Santos</dc:creator>
      <pubDate>Thu, 28 Sep 2023 17:26:40 +0000</pubDate>
      <link>https://dev.to/forja/como-criar-e-registrar-uma-chave-ssh-para-o-github-fah</link>
      <guid>https://dev.to/forja/como-criar-e-registrar-uma-chave-ssh-para-o-github-fah</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Autor: &lt;a href="https://github.com/imnotjuniodev"&gt;Junio Santos&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Índice
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
O que é

&lt;ul&gt;
&lt;li&gt;Pré-requisitos&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Instalando OpenSSH no seu computador&lt;/li&gt;
&lt;li&gt;Criando a chave SSH&lt;/li&gt;
&lt;li&gt;Adicionando no GitHub&lt;/li&gt;
&lt;li&gt;Registrando no dispositivo&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que é
&lt;/h2&gt;

&lt;p&gt;OpenSSH é uma ferramenta que auxilia em conexões remotas utilizando o protocolo SSH, servindo como um meio de autenticação prático onde não é necessário senhas e usernames. Aplique esse conceito ao Github (ou GitLab) e voce poderá clonar seus projetos e eles automaticamente autenticar com a sua conta, podendo manter o repositório sincronizado com maior segurança e sem necessidade de senha.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se voce utiliza o &lt;strong&gt;Github Desktop&lt;/strong&gt; não é necessário configurar alguma chave SSH, mas é bom ter configurado caso em algum momento precise utilizar Git fora da GUI&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pré-requisitos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;openSSH&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instalando OpenSSH no seu computador
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Caso ja openssh instalado em seu pc, pode pular para Criando a Chave &lt;br&gt;
SSH&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  MacOS
  &lt;h3&gt;
  
  
  MacOS:
&lt;/h3&gt;

&lt;p&gt;MacOS já vem com o git instalando por padrão, e openssh já vem embutido sem a necessidade de fazer qlqer download extra.&lt;br&gt;&lt;br&gt;
Caso queira confirmar que realmente está tudo certo basta executar:&lt;br&gt;
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew &lt;span&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;





&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;
  Linux
  &lt;br&gt;
Para conferir se já está disponível no seu computador utilize o comando:&lt;br&gt;

&lt;pre&gt;&lt;code&gt;&lt;span&gt;if &lt;/span&gt;&lt;span&gt;command&lt;/span&gt; &lt;span&gt;-v&lt;/span&gt; /usr/bin/ssh-agent &amp;amp;&amp;gt; /dev/null&lt;span&gt;;&lt;/span&gt; &lt;span&gt;then &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt; &lt;span&gt;"ta tudo certo"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt; &lt;span&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Se de fato apareceu &lt;code&gt;ta tudo certo&lt;/code&gt; no teu terminal significa que ta tudo certo e pode pular essa parte.&lt;br&gt;
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;span&gt;# -- ubuntu/mint/debian&lt;/span&gt;
&lt;span&gt;sudo &lt;/span&gt;apt &lt;span&gt;install &lt;/span&gt;openssh-client

&lt;span&gt;# -- fedora&lt;/span&gt;
&lt;span&gt;sudo &lt;/span&gt;dnf &lt;span&gt;install &lt;/span&gt;openssh

&lt;span&gt;# -- openSUSE&lt;/span&gt;
&lt;span&gt;sudo &lt;/span&gt;zypper &lt;span&gt;install &lt;/span&gt;openssh

&lt;span&gt;# -- arch&lt;/span&gt;
&lt;span&gt;sudo &lt;/span&gt;pacman &lt;span&gt;-S&lt;/span&gt; openssh
&lt;/code&gt;&lt;/pre&gt;





&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;
  Windows
  &lt;br&gt;
Uma das mais maneiras mais fáceis para conseguir gerenciar sua chave SSH no Windows é utilizando o &lt;strong&gt;Git Bash&lt;/strong&gt;

&lt;p&gt;Caso não tenha instalado basta baixar direto do site do Git acessando: &lt;a href="https://git-scm.com/download/win"&gt;https://git-scm.com/download/win&lt;/a&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Clique no primeiro link para baixar&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ve17RFMK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/2rYMvBm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ve17RFMK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/2rYMvBm.png" alt="image" width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Durante a instalação selecione a opção padrão &lt;em&gt;&lt;strong&gt;Use bundled OpenSSH&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando a chave SSH
&lt;/h2&gt;

&lt;p&gt;Daqui em diante o processo será o mesmo tanto para Linux quanto para Windows&lt;br&gt;&lt;br&gt;
OBS: &lt;strong&gt;Usuários de Windows&lt;/strong&gt; devem prosseguir utilizando &lt;strong&gt;Git Bash&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Para gerar uma nova chave usaremos o &lt;code&gt;ssh-keygen&lt;/code&gt; e passaremos alguns parametros para reforçar a segurança como:  &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parâmetro&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-f&lt;/td&gt;
&lt;td&gt;Indica onde a chave será armazenada e qual nome ela terá. Gera dois arquivos, um privado e um público (com extensão .pub).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-t&lt;/td&gt;
&lt;td&gt;Escolhe o algoritmo de criptografia a ser usado. O mais seguro atualmente é ed25519. Mais informações sobre outros algoritmos e comparações podem ser encontradas &lt;a href="https://dev.tolink"&gt;aqui&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-b&lt;/td&gt;
&lt;td&gt;Define o tamanho em bits da chave. Quanto maior, mais seguro. Por precaução, utilizaremos o maior disponível.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-E&lt;/td&gt;
&lt;td&gt;Especifica o tipo de hash no qual a chave será armazenada. O mais seguro disponível é sha512, e é isso que usaremos.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-C&lt;/td&gt;
&lt;td&gt;Define o comentário que será o identificador da chave. Neste caso, será o mesmo e-mail usado no GitHub, desde que não seja o e-mail privado. Se o seu e-mail principal for privado, o GitHub gera um e-mail para você. Basta &lt;a href="https://dev.tolink"&gt;clicar aqui&lt;/a&gt; e copiar o e-mail que fica abaixo da opção "Keep my email addresses private" (deve ser algo como: 541234+@users.noreply.github.com).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Com isso esclarecido, basta inserir todo o comando abaixo para prosseguirmos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-b&lt;/span&gt; 4096    &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-E&lt;/span&gt; sha512  &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.ssh/gitKey &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"seu@email.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;lembre-se, o email não pode ficar entre &lt;code&gt;&amp;lt;&lt;/code&gt; e &lt;code&gt;&amp;gt;&lt;/code&gt;, deve ser identico ao utilizado no GitHub&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ao entrar com o comando irá aparecer uma tela pedindo uma senha. Como essa chave será utilizada apenas para validar o acesso ao github não é necessário, então aperte &lt;code&gt;Enter&lt;/code&gt; para prosseguir.&lt;/p&gt;

&lt;p&gt;Se formos ver a pasta ssh usando &lt;code&gt;ls ~/.ssh/&lt;/code&gt; irá notar que foram gerados dois arquivos: &lt;code&gt;gitKey&lt;/code&gt; e &lt;code&gt;gitKey.pub&lt;/code&gt;&lt;br&gt;&lt;br&gt;
A &lt;code&gt;gitKey&lt;/code&gt; é a que contem os dados sensíveis e &lt;strong&gt;nunca deve ser compartilhada&lt;/strong&gt; em hipotese alguma, pois é somente com ela permanecendo desconhecida que a &lt;code&gt;gitKey.pub&lt;/code&gt; terá alguma validade e deverá gerar outra.&lt;br&gt;
Por outro lado, a &lt;code&gt;gitKey.pub&lt;/code&gt; pode ser mostrada sem problema algum e será ela que iremos mandar para o GitHub para autenticar com o nosso computador.  &lt;/p&gt;

&lt;p&gt;Para ler o arquivo &lt;code&gt;gitKey.pub&lt;/code&gt; basta executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/gitKey.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;esse arquivo terá que começar com: &lt;code&gt;ssh-ed25519&lt;/code&gt; e terminar com o email utilizado no Git.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gP5zcjs5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/vyrDLuj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gP5zcjs5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/vyrDLuj.png" alt="img" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;e apenas copie essa linha pois será necessária para a próxima etapa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adicionando no GitHub
&lt;/h2&gt;

&lt;p&gt;Após copiar nossa chave pública do SSH, abra a página de chaves no site do Github (&lt;a href="https://github.com/settings/keys"&gt;ou clicando aqui&lt;/a&gt;) e aperte o botão &lt;strong&gt;New SSH Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C0R0caJi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/BLH6ZHQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C0R0caJi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/BLH6ZHQ.png" alt="img" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E basta dar um nome que seja fácil para voce identificar de qual computador está configurado, em &lt;strong&gt;Key type&lt;/strong&gt; usar &lt;em&gt;Authentication key&lt;/em&gt; e por fim inserir a &lt;em&gt;chave pública&lt;/em&gt; inteira no campo &lt;strong&gt;Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dJVedM05--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/TrST1xg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dJVedM05--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/TrST1xg.png" alt="img" width="755" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Registrando no dispositivo
&lt;/h2&gt;

&lt;p&gt;Quanto ao GitHub já está tudo certinho, *&lt;em&gt;PORÉMMM...&lt;/em&gt; ainda temos que registrar a nossa chave no nosso próprio computador&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ué, mas nós criamos a chave e até registrei no Github, não é só usar?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por padrão as chaves geradas não são registradas pois não são em todos os casos que SSH é utilizado apenas localmente, por ser um arquivo ela pode ser exportada para outro sistema e só lá ser adicionada, por conta disso é de nossa responsabilidade fazermos esse registro&lt;br&gt;
Um meio de verificar se a chave SSH está funcionado é mandando uma requisição para o GitHub, vamos testar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A8SDoOK3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/9aRsxIU.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A8SDoOK3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/9aRsxIU.png" alt="img" width="429" height="24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vish...  &lt;code&gt;Permission Denied&lt;/code&gt; não é nada bom... &lt;br&gt;
Para resolver isso temos que invocar o &lt;code&gt;ssh-agent&lt;/code&gt; e &lt;code&gt;ssh-add&lt;/code&gt; que vieram junto com a instalação do openssh que fizemos no começo do post.  &lt;/p&gt;

&lt;p&gt;Antes, vamos instanciar o ssh-agent utilizando o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# bash/zsh:&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# fish&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-c&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e voce provavelmente deve ver uma mensagem parecida com &lt;code&gt;Agent pid 16916&lt;/code&gt;&lt;br&gt;
Agora sim, só nos resta registramos nossa &lt;strong&gt;chave privada&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-add ~/.ssh/githubKey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e novamente uma mensagem de confirmação deve ser exibida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Identity added: /home/ManoelGomes/.ssh/gitKey (&amp;lt;your git email&amp;gt;)

# ou a mensagem abaixo se for um usuário da maçã
Identity added: /Users/ManoelGomes/.ssh/gitKey (&amp;lt;your git email&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E chegamos ao momento final ~~&lt;br&gt;
Vamos tentar conectar no server do GitHub para ver se nossa máquina está ou não autenticada:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kQwejNHP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/WuDoYpy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kQwejNHP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/WuDoYpy.png" alt="img" width="800" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora está funcionando!!&lt;br&gt;
Caso continue dando o erro de &lt;em&gt;acesso negado&lt;/em&gt;, repita as etapas de adicionar a chave que funcionará.&lt;/p&gt;




&lt;p&gt;E a partir de agora toda vez que voce for clonar algum repositório, esqueça o modo HTTP e use apenas SSH e nunca mais terá que inserir seu login e senha quando for trabalhar em algum outro projeto &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i3IjXqHr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/QplPuVK.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i3IjXqHr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/QplPuVK.png" alt="img" width="530" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E é isso! também não se esqueça de configurar a chave GPG para assinar cada commit que você fez!&lt;br&gt;
E qualquer dúvida é só mandar aqui nos comentarios ;)&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>github</category>
      <category>ssh</category>
      <category>git</category>
    </item>
  </channel>
</rss>
