Como gerar chaves SSH para o GitHub

Publicados: 2022-02-05

Git e GitHub são ferramentas essenciais para todo desenvolvedor. Eles são amplamente utilizados em quase todos os tipos de projeto de desenvolvimento de software.

Existem outros serviços de hospedagem Git como Gitlab e Bitbucket, mas o GitHub é a escolha mais popular para desenvolvedores. Você pode até editar seu perfil para parecer mais atraente para os recrutadores.

Você pode usar o Git e o GitHub para organizar seus projetos, colaborar com outros desenvolvedores e – claro – na Kinsta.

Mas como o Git e o GitHub são ferramentas relacionadas, mas diferentes, você precisa atualizar seu fluxo de trabalho com cada uma delas constantemente.

Recomendamos o uso de chaves SSH para cada uma de suas máquinas. Então, neste tutorial, você aprenderá o que são, algumas de suas vantagens e como gerar e configurar chaves SSH do GitHub.

Vamos começar!

O que são chaves SSH?

Simplificando, as chaves SSH são credenciais usadas para o protocolo SSH (Secure Shell) para permitir o acesso seguro a computadores remotos pela Internet. Normalmente, essa autenticação ocorre em um ambiente de linha de comando.

Esse protocolo é baseado na arquitetura cliente-servidor, o que significa que você, como usuário (ou “cliente”), precisa usar um software especial, chamado cliente SSH, para fazer login em um servidor remoto e executar comandos. Isso é basicamente o que você está fazendo ao autenticar por meio de um terminal no GitHub.

Terminal mostrando dois comandos: "git commit -am "Adicionado comentário no arquivo de exemplo de programação estruturada" e "git push" com a resposta de sucesso do servidor GitHub
Empurre.

Mas o SSH não é usado apenas para o GitHub. É amplamente utilizado por outras plataformas como Kinsta, Google Cloud e Amazon Web Services para criar um canal seguro para acessar seus serviços.

Agora, abordando como as chaves SSH realmente funcionam, você precisa entender as diferenças entre chaves públicas e privadas.

Chaves Públicas x Privadas

Vamos começar com o básico.

O protocolo SSH usa uma técnica de criptografia chamada criptografia assimétrica . Este termo pode parecer complicado e estranho, mas nada poderia estar mais longe da verdade.

Basicamente, a criptografia assimétrica é um sistema que usa um par de chaves, ou seja, chaves públicas e privadas .

Como você pode imaginar, a chave pública pode ser compartilhada com qualquer pessoa. Seu principal objetivo é criptografar dados, convertendo a mensagem em código secreto ou texto cifrado. Essa chave geralmente é enviada para outros sistemas – por exemplo, servidores – para criptografar os dados antes de enviá-los pela Internet.

Por outro lado, a chave privada é aquela que você deve manter para si mesmo. É usado para descriptografar os dados criptografados com sua chave pública. Sem ele, é impossível decodificar suas informações criptografadas.

Este método permite que você e o servidor mantenham um canal de comunicação seguro para transmitir as informações.

Veja o que acontece em segundo plano quando você se conecta a um servidor via SSH:

  1. O cliente envia a chave pública para o servidor.
  2. O servidor pede ao cliente para assinar uma mensagem aleatória criptografada com a chave pública usando a chave privada.
  3. O cliente assina a mensagem e encaminha o resultado para o servidor.
  4. Uma conexão segura é estabelecida entre o cliente e o servidor.

É importante manter suas chaves privadas seguras e compartilhá-las com qualquer pessoa sob nenhuma circunstância. Eles são literalmente a chave para todas as informações enviadas a você.

Usando chaves SSH com o GitHub

Desde 13 de agosto de 2021, o Github não aceita mais autenticação de senha para acesso à linha de comando. Isso significa que agora você precisa se autenticar por meio de um token de acesso pessoal ou usar uma chave SSH (um pouco mais conveniente).

Veja o que acontece quando você tenta se autenticar com sua senha do GitHub por HTTP em um terminal:

 Username for 'https://github.com': yourusername Password for 'https://[email protected]': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

O GitHub precisa de sua chave pública para autorizar você a editar qualquer um de seus repositórios via SSH.

Vamos ver como você pode gerar chaves SSH localmente.

Como gerar chaves SSH localmente

Agora que você entende um pouco sobre o protocolo SSH e as diferenças entre chaves públicas e privadas, é hora de configurar o canal SSH seguro entre sua máquina e seus repositórios do GitHub.

Antes de prosseguirmos, você já deve ter uma conta no GitHub e um terminal/prompt de comando com o Git instalado em seu sistema. Se você estiver executando o Windows, certifique-se de instalar o Git bash, que possui todas as ferramentas necessárias para acompanhar este tutorial integrado.

O cliente OpenSSH é o software de código aberto mais popular usado para se conectar via SSH. Você não precisará se preocupar com seu sistema operacional porque ele é instalado por padrão no Linux, macOS e Windows 10.

Você precisa iniciar um prompt de comando no Windows ou um terminal em sistemas baseados em Unix para gerar chaves SSH locais. Normalmente, você pode fazer isso pesquisando por “terminal”, “cmd” ou “powershell” no painel do aplicativo e clicando no ícone que aparece.

Localizador de aplicativos mostrando diferentes aplicativos de terminal, incluindo "Terminal Emulator", "Alacritty" e "Kitty".
Pesquisa de aplicativos de terminal.

Depois de fazer isso, você deve ter uma janela semelhante à imagem a seguir.

Aplicativo terminal semitransparente rodando a casca do peixe.
Aplicação de terminais.

Execute o seguinte comando para gerar um par de chaves SSH local:

 ssh-keygen -t ed25519 -C "[email protected]"

É hora de contar um segredo: ninguém consegue se lembrar desse comando! A maioria dos desenvolvedores precisa pesquisar no Google todas as vezes porque:

  1. É um comando muito longo, com números esquecíveis e aparentemente aleatórios.
  2. Nós o usamos raramente, então não vale a pena guardá-lo na memória a maior parte do tempo.

No entanto, é importante entender cada comando que introduzimos em nossos terminais, então vamos ver o que cada parte deste significa.

  • ssh-keygen: A ferramenta de linha de comando usada para criar um novo par de chaves SSH. Você pode ver seus sinalizadores com ssh-keygen help
  • -t ed25519: O sinalizador -t é usado para indicar o algoritmo usado para criar a assinatura digital do par de chaves. Se o seu sistema suportar, ed25519 é o melhor algoritmo que você pode usar para criar pares de chaves SSH.
  • -C “email”: O sinalizador -c é usado para fornecer um comentário personalizado no final da chave pública, que geralmente é o e-mail ou identificação do criador do par de chaves.

Depois de digitar o comando em seu terminal, você terá que inserir o arquivo no qual deseja salvar as chaves. Por padrão, ele está localizado em seu diretório pessoal, em uma pasta oculta chamada “.ssh”, mas você pode alterá-lo para o que quiser.

Em seguida, será solicitada uma senha para adicionar ao seu par de chaves. Isso adiciona uma camada extra de segurança se, a qualquer momento, seu dispositivo for comprometido. Não é obrigatório adicionar uma senha, mas é sempre recomendado.

É assim que todo o processo se parece:

comando ssh-keygen com várias mensagens, incluindo o arquivo em que as chaves serão salvas "/home/daniel/.ssh/kinsta_keys", entrada de senha e a impressão digital da chave resultante.
comando ssh-keygen.

Como você pode ver, este comando gera dois arquivos no diretório que você selecionou (normalmente ~/.ssh ): a chave pública com a extensão .pub e a privada sem extensão.

Mostraremos como adicionar a chave pública à sua conta do GitHub posteriormente.

Adicionar chave SSH ao agente ssh

O programa ssh-agent é executado em segundo plano, mantém suas chaves privadas e senhas com segurança e as mantém prontas para uso pelo ssh. É um ótimo utilitário que evita que você digite sua senha toda vez que quiser se conectar a um servidor.

Por isso, você adicionará sua nova chave privada a esse agente. Veja como:

  1. Certifique-se de que o ssh-agent esteja sendo executado em segundo plano.
     eval `ssh-agent` # Agent pid 334065

    Se você receber uma mensagem semelhante a esta, se tudo estiver bem. Isso significa que o agente ssh está sendo executado em um ID de processo específico (PID).

  2. Adicione sua chave privada SSH (aquela sem extensão) ao ssh-agent.
     ssh-add ~/.ssh/kinsta_keys

    Substitua kinsta_keys pelo nome da sua chave SSH. Se esta for a primeira chave que você criou, ela deve ser chamada de “id_algorithm_used”, por exemplo, id_ed25519 .

Adicionar chave SSH à conta do GitHub

A etapa final é adicionar sua chave pública à sua conta do GitHub. Basta seguir estas instruções:

  1. Copie sua chave pública SSH para sua área de transferência. Você pode abrir o arquivo onde está localizado com um editor de texto e copiá-lo, ou usar o terminal para mostrar seu conteúdo.
     cat ~/.ssh/kinsta_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. Faça login no GitHub ] e vá para a seção superior direita da página, clique na sua foto de perfil e selecione Configurações.

    Painel superior direito do GitHub mostrando diferentes seções com uma seta apontando para a seção Configurações.
    configurações do GitHub.

  3. Em seguida, em suas configurações de perfil, clique nas chaves SSH e GPG .

    Painel de configurações de perfil mostrando a opção de chaves SSH e GPG.
    Chaves SSH e GPG.

  4. Clique no botão Nova chave SSH .

    Seção de chaves SSH com uma seta apontando para o botão Nova chave SSH.
    Novo botão de chave SSH.

  5. Dê um título à sua nova chave SSH no GitHub – geralmente, o dispositivo do qual você usará essa chave. E cole a chave na área Chave .

    Adicione um novo formulário de chave SSH com os campos "Título" e "Chave".
    Adicione um novo formulário de chave SSH.

  6. Adicione sua chave SSH.

    Adicionar botão de chave SSH.
    Adicionar botão de chave SSH.

Teste a conexão SSH com um repo Push

É hora de testar tudo o que você fez até agora. Você vai alterar, confirmar e enviar por push para um de seus repositórios existentes usando SSH para garantir que sua conexão esteja configurada corretamente.

Todos os planos de hospedagem Kinsta incluem suporte 24 horas por dia, 7 dias por semana, de nossos desenvolvedores e engenheiros veteranos do WordPress. Converse com a mesma equipe que apoia nossos clientes da Fortune 500. Confira nossos planos!

Para nosso exemplo, modificaremos o site HTML simples que criamos em nosso tutorial Git for Web Development.

Primeiro, precisaremos clonar o repositório em nossa máquina local. Podemos ir para a página do repositório no GitHub e copiar o endereço SSH fornecido.

Página do GitHub mostrando o comando clone SSH.
Comando de clonagem SSH.

Em seguida, clone o repositório usando um terminal:

 git clone [email protected]:DaniDiazTech/HTML-site.git

Agora, vamos adicionar uma tag <h1> simples no arquivo index.html :

 ... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...
Site HTML simples com o título "Um novo título" e quatro fotos de itens técnicos.
O site HTML simples.

Não vamos mexer em nenhum JavaScript ou CSS para manter essa edição simples. Mas se você for habilidoso com JavaScript, poderá encontrar um lugar na Kinsta. Verifique as habilidades de codificação que você precisa para fazer parte da equipe Kinsta.

Depois de fazer isso, confirme as alterações:

 git commit -am "Added a simple title"

E empurre-os para o GitHub como faria normalmente.

 git push

Se tudo correu bem, parabéns! Você acabou de configurar uma conexão SSH entre sua máquina e o GitHub.

Gerenciar várias chaves SSH para diferentes contas do GitHub

Se você tiver várias contas do GitHub - digamos, uma para seus projetos pessoais e outra para seu trabalho - é difícil usar o SSH para ambos. Normalmente, você precisaria de máquinas separadas para autenticar em diferentes contas do GitHub.

Mas isso pode ser resolvido facilmente configurando o arquivo de configuração SSH.

Vamos entrar nisso.

  1. Crie outro par de chaves SSH e adicione-o à sua outra conta do GitHub. Lembre-se do nome do arquivo ao qual você está atribuindo a nova chave.
     ssh-keygen -t ed25519 -C "[email protected]"
  2. Crie o arquivo de configuração SSH. O arquivo de configuração informa ao programa ssh como ele deve se comportar. Por padrão, o arquivo de configuração pode não existir, então crie-o dentro da pasta .ssh/:
     touch ~/.ssh/config
  3. Modifique o arquivo de configuração SSH. Abra o arquivo de configuração e cole o código abaixo:
     #Your day-to-day GitHub account Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # Work account Host github-work HostName github.com IdentityFile ~/.ssh/work_key_file IdentitiesOnly yes

Agora, toda vez que você precisar autenticar via SSH usando sua conta de trabalho ou secundária, você ajusta um pouco o endereço SSH do repositório, de:

 [email protected]:workaccount/project.git

…para:

 [email protected]:workaccount/project.git

Resumo

Parabéns — você aprendeu a maior parte do conhecimento prático necessário para se conectar ao GitHub via SSH!

Este tutorial discutiu a necessidade do protocolo SSH, as diferenças entre chaves públicas e privadas, como gerar chaves, adicioná-las ao GitHub e até mesmo gerenciar várias chaves SSH para diferentes contas do GitHub. Lembre-se de que, a menos que você queira perder o acesso a tudo, sua chave privada precisa permanecer assim: privada.

Com esse conhecimento, agora você está pronto para desenvolver um fluxo de trabalho impecável com Git e GitHub. Continue codificando!