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.
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:
Clique em Developer settings, que está no menu esquerdo do seu perfil:
E então em Personal acess tokens:
E agora em Generate new token:
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.
Uma vez clicando em Generate token, o seu token é gerado, e você deve copiá-lo.
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.
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
Clique em New SSH key
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.
Com isto, sua chave aparecerá no menu de chaves SSH do GitHub, e assim como os tokens, pode ser deletada a qualquer momento.
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.
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!!