Categorias
Controle de versão Desenvolvimento Linux/Unix/*nix Segurança

GitHub com SSH

Sejamos francos: ao trabalhar com repositórios Git, especialmente no GitHub, depois de algum tempo começamos a achar que perder tempo digitando o usuário e a senha a cada push é inaceitável. Principalmente se trabalhamos com commits freqüentes:

Se, ao realizar um push, você precisa digitar usuário/senha como na ilustração acima, verifique a configuração de seu remote origin com o comando “git remote -v“: ele provavelmente estará configurado para uma URL https:

Existem diversas alternativas para que o push não solicite usuário/senha, mas uma das mais simples é através do uso de chaves SSH para seu usuário no GitHub. Os passos a seguir ilustram o procedimento.

Acrescente sua chave SSH ao GitHub

Se você já tem um par de chaves SSH (a chave privada e a chave pública), acresente a sua chave PÚBLICA na configuração do GitHub:

Se você não tem um par de chaves SSH precisará, primeiro, criar esse par de chaves. Consulte a documentação do SSH.

IMPORTANTE: na criação do par de chaves SSH você terá duas opções: usar uma senha na chave ou manter a chave sem senha. Se você digitar uma senha para a chave, precisará continuar digitando uma senha no momento de fazer o push no GitHub, só que agora não é mais a senha do usuário GitHub, é a senha da chave SSH. Eu tenho um par de chaves SSH, sem senha, especificamente para o GitHub.

Depois de acicionar sua chave PÚBLICA ao GitHub, ela estará disponível para uso:

Atenção: note que estou me referindo à sua chave PÚBLICA em letras maiúsculas! Isso é para chamar sua atenção que a chave privada deve ficar em seu poder, secreta, sem compartilhar com ninguém. A chave PÚBLICA pode ser compartilhada e divulgada, mas a chave privada precisa permanecer secreta. Caso contrário alguém poderá fazer coisas muito ruins com seu repositório…

Altere o remote origin em seu repositório local

Agora que sua chave PÚBLICA já está no GitHub, você precisa configurar seu repositório local para utilizar uma outra URL, que permite conexões SSH.

Ao acessar o repositório via HTTPS, o endereço de acesso tem o seguinte padrão:

https://github.com/<USUÁRIO>/<REPOSITÓRIO>.git

Precisamos utilizar o endereço que permite o acesso via SSH, que tem este padrão:

git@github.com:<USUÁRIO>/<REPOSITÓRIO>.git

Para fazer essa alteração, utilizamos o comando “git remote set-url origin“. Veja como o remote origin foi alterado para usar a URL que permite SSH:

Informe ao Git qual é a chave PRIVADA que você utilizará

Até o momento você já conseguiu colocar sua chave PÚBLICA na configuração do GitHub e já conseguiu alterarl o URL de acesso para usar o SSH. Ainda falta uma última coisa: inforar ao Git qual é a chave PRIVADA que “casa” com a chave PÚBLICA que você configurou no GitHub.

Se você não informar ao Git qual é a chave PRIVADA correta, por padrão ele tentará usar uma chave com o nome de “id_rsa“, geralmente localizada no diretório .ssh. Como essa chave não existe (ou, se existir, pode não ser a chave privada correta do par de chaves que você criou), você não terá permissão para push/fetch no repositório:

Note que na ilustração acima, ao fazer o push o Git tentou usar uma chave privada padrão (/home/abrantesasf/.ssh/id_rsa) que nem existe mais. Portanto o GitHub me respondeu com “Permission denied (publickey)“.

Uma das maneiras mais simples para resolver isso é configurar o Git e informar qual é a chave privada correta e onde essa chave está localizada.

Você pode fazer isso manualmente, editando o arquito ~/.gitconfig e, na seção [core], acerscentar o path até a chave privada correta através da variável sshCommand:

Você também pode fazer isso através do comando git config:

Depois disso, você pode dar um push normalmente que a conexão será feita de modo seguro, via par de chaves SSH, sem a solicitação de digitar usuário e senha (se você não colocou uma senha nas chaves SSH):

Obviamente você deve manter sua chave PRIVADA sob total sigilo. Se, por algum motivo, sua chave privada for comprometida (divulgada), você precisará remover a chave PÚBLICA que está no GitHub pois, caso contrário, quem pegou sua chave privada poderá fazer alterações em seus repositórios.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *