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

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

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

Mas como o Git e GitHub são ferramentas relacionadas, porém 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á quais são elas, algumas de suas vantagens e como gerar e configurar chaves SSH 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 acesso seguro a computadores remotos pela internet. Normalmente, essa autenticação ocorre em um ambiente de linha de comando.

Este 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. Isto é basicamente o que você está fazendo ao se autenticar através de um terminal para o GitHub.

Git push
Git push.

Mas o SSH não é usado apenas para 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, entrando em como as chaves SSH realmente funcionam, você precisa entender as diferenças entre as chaves públicas e privadas.

Chaves públicas vs 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 utiliza um par de chaves, ou seja, chaves públicas e privadas.

Como você pode adivinhar, a chave pública pode ser compartilhada com qualquer pessoa. Seu principal objetivo é criptografar dados, convertendo a mensagem em código secreto ou texto criptografado. Esta chave é normalmente 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 guardar para si mesmo. Ela é usada para decifrar os dados criptografados com sua chave pública. Sem ela, é 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. Elas são literalmente a chave para todas as informações enviadas a você.

Usando as 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. Isto significa que agora você precisa autenticar através de um token de acesso pessoal ou usar uma chave SSH (um pouco mais conveniente).

Aqui está o que acontece quando você tenta autenticar com sua senha do GitHub sobre 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/'

GitHub precisa da sua chave pública para autorizar você a editar qualquer um dos seus repos 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 seu repositório GitHub.

Antes de seguirmos adiante, você já deve ter uma conta GitHub e um terminal/comando prompt com Git instalado em seu sistema. Se você estiver rodando Windows, certifique-se de ter instalado o Git bash, que tem todas as ferramentas que você precisará seguir junto com este tutorial incorporado.

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

Você precisa acionar um prompt de comando no Windows ou um terminal em sistemas baseados no Unix para gerar chaves SSH locais. Normalmente, você pode fazer isso procurando por “terminal”, “cmd”, ou “powerhell” no seu painel de aplicativo, depois clicando no ícone que aparece.

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

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

Aplicativo de terminal semitransparente executando a casca do peixe.
Aplicativo de terminal

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

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

É hora de lhe contar um segredo: ninguém pode realmente se lembrar deste comando! A maioria dos desenvolvedores tem que pesquisá-lo no Google toda vez porque:

  1. É um comando realmente longo, com números esquecíveis e aleatórios.
  2. Usamos raramente, por isso não vale a pena comprometê-lo com a memória na 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 suas bandeiras com ssh-keygen help
  • t ed25519: A bandeira -t é usada para indicar o algoritmo usado para criar a assinatura digital do par de chaves. Se o seu sistema suporta isso, ed25519 é o melhor algoritmo que você pode usar para criar pares de chaves SSH.
  • -C “email”: A bandeira -C é usada para fornecer um comentário personalizado no final da chave pública, que normalmente é o e-mail ou a identificação do criador do par de chaves.

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

Então você será solicitado a acrescentar uma senha para o seu par de chaves. Isto adiciona uma camada extra de segurança se, a qualquer momento, o seu dispositivo for comprometido. Não é obrigatório adicionar uma frase-chave, mas sempre é recomendado.

Este é o aspecto de todo o processo:

comando ssh-keygen com várias mensagens incluindo o arquivo, 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 (geralmente ~/.ssh): a chave pública com a extensão .pub, e a privada sem extensão.

Nós lhe mostraremos como adicionar a chave pública à sua conta GitHub mais tarde.

Adicione a chave SSH ao ssh-agent

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

Por causa disso, você vai adicionar sua nova chave privada a este agente. Veja como:

  1. Certifique-se de que o ssh-agent está rodando 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 ssh-agente está rodando sob uma identificação de processo particular (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 é a primeira chave que você criou, ela deve ser nomeada “id_algorithm_use”, por exemplo, id_ed25519.

Adicionar chave SSH à conta GitHub

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

  1. Copie sua chave SSH pública para a sua área de transferência. Você pode abrir o arquivo onde ele 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. Entre no GitHub e vá para a seção superior direita da página, clique na foto do seu 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. Então, no perfil de suas configurações, clique nas teclas 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 novo botão da chave SSH.
    Novo botão chave SSH

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

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

  6. Adicione sua chave SSH.

    Adicione o botão-chave SSH
    Adicione o botão-chave SSH

Teste de conexão SSH com um repo push

É hora de testar tudo o que você já fez até agora. Você vai mudar, se comprometer e mover para um de seus repositórios existentes usando SSH para garantir que sua conexão esteja configurada corretamente.

Para nosso exemplo, vamos modificar 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 de reporte no GitHub e copiar o endereço SSH que ele fornece.

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

Então, clone o repo usando um terminal:

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

Agora, vamos adicionar uma simples tag <h1> 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 imagens de itens técnicos.
O site HTML simples

Não estamos tocando em nenhum JavaScript ou CSS para manter esta edição simples. Mas se você é habilidoso com JavaScript, você pode encontrar um lugar na Kinsta. Verifique as habilidades de codificação que você precisa para fazer parte da equipe Kinsta.

Depois de fazer isso, comprometa as mudanças:

git commit -am "Added a simple title"

E mova para dentro do GitHub como você normalmente faria.

git push

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

Gerencie múltiplas chaves SSH para diferentes contas GitHub

Se você tem várias contas GitHub – digamos uma para seus projetos pessoais e outra para o seu trabalho – é difícil usar o SSH para ambos. Você normalmente precisaria de máquinas separadas para autenticar as diferentes contas GitHub.

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

Vamos entrar nisso.

  1. Crie outro par de chaves SSH, e adicione-o à sua outra conta GitHub. Tenha em mente o 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 diz 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 do 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ê precisa autenticar via SSH usando seu trabalho ou conta secundária, você afina um pouco o endereço SSH repo, de:

[email protected]:workaccount/project.git

…para:

git@github-work:workaccount/project.git

Resumo

Parabéns – você aprendeu a maior parte do conhecimento prático que você precisa 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 múltiplas chaves SSH para diferentes contas GitHub. Tenha em mente que, a menos que você queira perder o acesso a tudo, sua chave privada precisa permanecer assim: privada.

Com este conhecimento, agora você está pronto para desenvolver um fluxo de trabalho sem falhas com Git e GitHub. Continue codificando!

Daniel Diaz

Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech