Em ferramentas com interfaces gráficas como GitHub Desktop ou o Visual Studio Code, o processo de autenticação no GitHub acaba sendo simples. Nestas ferramentas, geralmente, só é preciso digitar o seu usuário e senha uma vez. Porém, quando falamos do terminal, a autenticação é um pouco diferente. Por isso, trago nesse artigo duas formas de fazer a autenticação via terminal no Linux ou, no caso do Windows, via Git Bash.

Note que, neste artigo, não estou considerando o GitHub CLI, que é uma ferramenta de linha de comando do próprio GitHub, já que este é um assunto a parte. Para testar a autenticação, irei fazer o clone de um repositório privado, que é a maneira mais rápida de verificar se tudo está funcionando corretamente.

Autenticação com HTTPS

HTTPS é uma sigla para Hypertext Transfer Protocol Secure, que seria algo como “Protocolo Seguro de Transferência de Hipertexto” em português. Este protocolo é a versão criptografada do HTTP, e permite a comunicação segura entre duas máquinas na rede.

A autenticação com o HTTPS se baseia em utilizar a URL do seu repositório. Por ser mais simples que a autenticação com SSH, será a primeira que abordaremos. Primeiro precisamos do link para o comando clone. Ele pode ser encontrado clicando em Code no seu repositório e selecionando a opção HTTPS.

Link de clone de um repositório utilizando o protocolo HTTPS

Desta forma, utilizando o comando git clone https://github.com/usuario/node-do-repositorio-privado.git na linha de comando, já somos requeridos a autenticação da conta. Aqui, você deve inserir o seu nome de usuário e senha; no entanto, caso você digite a senha, a autenticação não será possível. Isso acontece porque em 2021 o GitHub deixou de aceitar sua senha de usuário como uma maneira de autenticação válida e começou a requerer um token de acesso.

Este token é uma espécie de senha segura gerada pelo próprio GitHub. O token pode ser usado para autenticar sua conexão em qualquer máquina, porém este geralmente tem um prazo de validade.

Os tokens são visíveis apenas no momento de sua criação, e o próprio GitHub recomenda anotar estes tokens em algum lugar. Isso porque ao fechar a página, não será mais possível visualizar este token. Mas não se preocupe, porque você pode criar e excluir tokens quando quiser. Assim, perder o seu token de autenticação não será um grande problema.

Criando o token

Para criar o token, você deve ir nas configurações do seu perfil. Podemos acessar essas configurações clicando sobre sua foto no canto superior direito da tela, e então selecionar a opção Settings:

Menu do usuário no Github

Clique em Developer settings, que está no menu esquerdo do seu perfil:

Opção Developer settings nas configurações do usuário no Github

E então em Personal acess tokens:

Opção Personal acess tokens nas configurações do perfil de usuário do Github

E agora em Generate new token:

Opção generate new token no menu de configurações do Github

Feito isso, você vai precisar digitar a sua senha e configurar o token. Você precisará colocar um nome no token e uma data de expiração; pode configurar quais acessos você deseja que o token tenha. Como este será um token específico para acessar os repositórios, selecionei apenas a opção repo, mas dependendo da sua necessidade você pode conferir mais acessos ao seu token, ou criar vários tokens com acessos diferentes.

Processo de configuração de um token

Uma vez clicando em Generate token, o seu token é gerado, e você deve copiá-lo.

Imagem de um token criado com sucesso

Dando um refresh na página, podemos ver que o nosso token está listado, mas não podemos mais ver qual é o seu conteúdo.

Lista de tokens depois de um refresh da página

Para deletar o token, basta clicar no botão Delete e pronto. Aquele token não será mais válido para autenticar sua conta.

Agora podemos tentar o comando git clone https://github.com/usuario/nome-do-repositorio-privado.git novamente. Você pode digitar seu nome de usuário normalmente e, no lugar da senha, você deve utilizar algum dos tokens cadastrados na sua conta no GitHub.

Feito isso, o seu repositório estará clonado e toda vez que você desejar utilizar este método, basta utilizar seu nome de usuário e um token válido para acessar a conta.

Autenticação com SSH

SSH é uma sigla para Secure Shell. Este é um protocolo de comunicação também criptografado que funciona com a utilização de chaves. Essas chaves são códigos que serão utilizados para criptografar e descriptografar dados da comunicação. Não vou entrar em detalhes sobre como essa criptografia acontece, mas saiba que precisaremos de um par de chaves: uma pública, que serve para enviar dados para a nossa máquina, e uma privada, que vai descriptografar as mensagens criptografadas com a chave pública.

Criando as chaves SSH

Para criar as chaves SSH, você precisa abrir o terminal (caso esteja usando Linux) ou o Git Bash (caso esteja usando Windows) e digitar o comando ssh-keygen -t ed25519 -C "SeuE-mail", colocando o seu e-mail entre aspas. Esse comando irá gerar o par de chaves SSH necessárias para a aplicação.

Após este comando, a ferramenta perguntará onde quer salvar a chave. Nesse ponto, você pode apertar [enter] para selecionar a opção padrão e então selecionar uma senha para associar à sua chave, ou apertar enter para não especificar nenhuma chave. Essa senha deverá ser digitada novamente. Então, se você selecionou a opção de não ter uma senha, basta apertar enter novamente na confirmação.

Agora o seu par de chaves SSH já foi gerado e se encontra em um diretório oculto na pasta home do seu usuário, no Linux e no Windows, chamado .ssh. Antes de salvarmos essas chaves no GitHub, precisamos adicioná-las ao gerenciador de chaves SSH da máquina. Para isso, acionamos esse gerenciador através do terminal do Linux ou do Git Bash no Windows com o comando eval "$(ssh-agent -s)" e então adicionamos a chave criada com o comando ssh-add ~/.ssh/id_ed25519

Cadastrando as chaves SSH no GitHub

Agora, vejamos como podemos utilizar esse par de chaves para a autenticação. Para isso, precisamos adicionar a chave pública do nosso par de chaves SSH ao GitHub. Então, precisamos acessar a nossa chave pública. Isso pode ser feito no Linux através do comando cat ~/.ssh/id_ed25519.pub, que irá imprimir a chave pública no terminal. Essa chave deve ser copiada por completo pelo usuário. No Windows pode-se usar o comando clip < ~/.ssh/id_ed25519.pub que já colocará a chave na área de transferência.

Uma vez que você já tem a chave na área de transferência, deve acessar as configurações do seu perfil e selecionar a opção SSH and GPG Keys

Opção SSH and GPGP Keys no menu de configurações do usuário no Github

Clique em New SSH key

Opção new SSH Key no menu de configurações de chaves SSh e GPG

E então selecione um nome para a chave, cole o conteúdo da chave disponível no terminal e clique em Add SSH key.

Adição de uma chave ssh

Com isto, sua chave aparecerá no menu de chaves SSH do GitHub, e assim como os tokens, pode ser deletada a qualquer momento.

Visualização de uma chave SSH inserida com sucesso

Fazendo o Clone

Se tudo ocorreu corretamente, sua conexão com o GitHub estará configurada; para testá-la, podemos utilizar o comando ssh -T git@github.com no terminal do Linux ou no Git Bash, no Windows.

Caso você receba um aviso como o abaixo, digite sim. E caso a linha de comando peça a senha da chave SSH, forneça-a. Essa é a senha que definimos no momento da criação da chave.

> Não é possível estabelecer a autenticidade do host 'github.com (IP ADDRESS)'.
> A impressão digital da chave RSA é SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
> Tem certeza de que deseja continuar com a conexão (sim/não)?

Uma mensagem como a mostrada abaixo indica que a conexão ocorreu com sucesso. Agora você pode utilizar o SSH para fazer a conexão com o GitHub, que não vai requerer a autenticação via token toda hora.

Agora, vamos fazer o clone do repositório privado. Para isso, basta utilizar o comando git clone novamente. Porém, ao invés de colocar o endereço disponível em HTTPS, colocaremos o endereço disponível na opção SSH.

Código para o clone de um repositório usando a opção SSH

E de fato, o comando git clone git@github.com:usuario/nome-do-repositorio-privado.git fará o clone do seu repositório, sem requerer a autenticação através de uma senha ou token, o que é muito prático.

Considerações finais

Essas são as formas de fazer a autenticação através do terminal ou do Git Bash, caso você esteja utilizando o Windows. Acho importante falar também que, independentemente da forma utilizada para a autenticação, os comandos do Git continuarão os mesmos, o que vai mudar são os formatos dos links utilizados.

Bons estudos!!