Como assinar commits no terminal zsh Ubuntu no Windows com WSL
- #Linux
- #GitHub
- #Git
O GitHub exibe commits com um selo de Verified quando são assinados. Esse selo especial simboliza maior segurança, autenticidade e integridade do código.
Para assinar um commit, é necessário usar uma chave GPG devidamente configurada. Esse processo é geralmente simples e pode ser feito em poucos passos. No entanto, enfrentei dificuldades para configurar a assinatura de commits recentemente, após instalar o WSL com Ubuntu no Windows 11 e o zsh. Como não encontrei uma solução na internet, decidi escrever este guia para ajudar outras pessoas.
1 - Instalação do Git
sudo apt update && sudo apt install git
2 - Configurando a chave GPG
2.0 - Gerar uma chave GPG, caso não tenha
gpg --full-generate-key
Configure como "RSA and RSA" com 4096 bits. Define o tempo em dias para expirar a chave, seu nome, seu email e a senha. A senha é opcional. Seu nome e email na chave podem ser visualizados analisando o commit do repositório clonado.
2.1 - Exportar a chave GPG
Obtenha o KeyId da sua chave GPG
gpg --list-secret-keys --keyid-format=long
O código em destaque ( CF8AF868E7EB8BD0 ) é a KeyID da chave que utilizei.
Configure o git para usar sua chave GPG para assinatura
git config --global user.signingkey CF8AF868E7EB8BD0
Exporte a chave pública GPG usando a KeyID
gpg --armor --export CF8AF868E7EB8BD0 > chave-gpg-publica.txt
- ** Eu utilizei o comando para exportar a chave pública para um arquivo chave-chave-gpg-publica.txt, mas também é possível usar o comando para imprimir a chave pública diretamente no terminal:
gpg --armor --export KeyID
Selecione todo o conteúdo do arquivo chave-gpg-publica.txt e copie.
Acesse a página do GitHub para inserir uma nova Chave GPG https://github.com/settings/gpg/new
Defina um nome para sua chave, cole o conteúdo copiado e salve sua chave GPG.
3 - Configurando o terminal zsh para commits assinados com a chave GPG
3.0 - Instalando o zsh
sudo apt update && sudo apt install zsh && chsh -s $(which zsh)
3.1 Configurando o programa para informar senha no terminal ( pinentry)
Abra o terminal zsh e execute os comandos abaixo:
sudo apt-get update && sudo apt-get install gnupg pinentry-tty && nano ~/.gnupg/gpg-agent.conf
- ** A linha de comados vai instalar o pientry-tty e abrir o arquivo gpg-agent.conf para editar com o nano
Adicione a linha abaixo no arquivo:
pinentry-program /usr/bin/pinentry-tty
Grave as alterações com o atalho Ctrl + O e confirme com a tecla Enter. Use Ctrl + X para sair.
Finalize processo do agente pgp
gpgconf --kill gpg-agent
Iniciar o agente gpg
gpg-agent --daemon
3.2 - Configurar o terminal
Para configurar o terminal será usado `nano` para editar o arquivo de terminal zshrc para o zsh e bashrc para o bash.
Zsh
Use o comando abaixo para abri o arquivo do terminal Zsh e cole a linha copiada no final do arquivo
nano ~/.zshrc
Copia a linha abaixo para colar no fim do arquivo do terminal
export GPG_TTY=$(tty)
Grave as alterações com o atalho Ctrl + O e confirme com a tecla Enter. Ctrl + X para sair.
source ~/.zshrc
Bash
Use o comando abaixo para abrir o arquivo do terminal Bash e cole a linha copiada no final do arquivo
nano ~/.bashrc
Copia a linha abaixo para colar no fim do arquivo do terminal
export GPG_TTY=$(tty)
Grave as alterações com o atalho Ctrl + O e confirme com a tecla Enter. Ctrl + X para sair.
source ~/.bashrc
4 - Testando a assinatura de commits
Depois de configurar a assinatura de commits com chave gpg, basta fazer um commit incluindo -S
commit -S -m "meu commit"
Exemplo:
echo "# Texto" > TEXTO.md && git add TEXTO.md && commit -S -m "adição do arquivo TEXTO.md"
- **O pientry-tty deve ser executado e solicitar que seja digitada a senha da chave GPG no terminal zsh.
Enviando commit assinado
git push origin main
Referências:
https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account
https://gist.github.com/samuelmendespy/53980f42be30832f2098d41966395398