TLDR; Use um arquivo netrc criptografado com o Git 1.8.3+ .
É possível salvar uma senha para um URL HTTPS do repositório Git com um ~/.netrc
(Unix) ou %HOME%/_netrc
(observe o _
) no Windows.
Mas : esse arquivo armazenaria sua senha em texto simples.
Solução : Criptografe esse arquivo com GPG (GNU Privacy Guard) e faça com que o Git descriptografe-o sempre que precisar de uma senha (para push
/ pull
/ fetch
/ clone
operação).
Nota: com o Git 2.18 (Q2 2018), agora você pode personalizar o GPG usado para descriptografar o arquivo criptografado. .netrc
arquivo .
Consulte commit 786ef50 , commit f07eeed (12 de maio de 2018) por Luis Marsano (``) .
(Mesclado por Junio C Hamano - gitster
- na confirmação 017b7c5 , 30 de maio de 2018)
git-credential-netrc
: gpg
opção de aceitação
git-credential-netrc
foi codificado para descriptografar com " gpg
", independentemente da opção gpg.program.
Este é um problema em distribuições como o Debian que chamam o GnuPG moderno de outra coisa, como ' gpg2
'
Instruções passo a passo para Windows
Com o Windows:
(O Git tem a gpg.exe
em sua distribuição, mas o uso de uma instalação completa do GPG inclui a gpg-agent.exe
, que memoriza sua frase secreta associada à sua chave GPG.)
Instale gpg4Win Lite
, a interface mínima da linha de comandos do gnupg (pegue a mais recentegpg4win-vanilla-2.X.Y-betaZZ.exe
) e complete o seu PATH com o diretório de instalação do GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Observe o copy
comando ' ': Git precisará de um script Bash para executar o comando ' gpg
'. Como gpg4win-vanilla-2
vem com ele gpg2.exe
, é necessário duplicá-lo.)
(Certifique-se de inserir uma senha para essa chave.)
Confie nessa chave
Instale o script auxiliar de credencial em um diretório dentro de %PATH%
:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(Cuidado: o script é renomeado no Git 2.25.x / 2.26, veja abaixo)
(Sim, esse é um script do Bash, mas funcionará no Windows, pois será chamado pelo Git.)
Crie um arquivo _netrc em texto não criptografado
machine a_server.corp.com
login a_login
password a_password
protocol https
machine a_server2.corp.com
login a_login2
password a_password2
protocol https
(Não esqueça a protocol
parte ' ': ' http
' ou ' https
' dependendo do URL que você usará.)
(Agora você pode excluir o _netrc
arquivo, mantendo apenas o arquivo _netrc.gpg
criptografado.)
(Observe que ' /
': C:\path\to...
não funcionaria de jeito nenhum.) (Você pode usar primeiro-v -d
para ver o que está acontecendo.)
A partir de agora, qualquer comando Git que use uma URL HTTP (S) que exija autenticação descriptografará esse _netrc.gpg
arquivo e usará o login / senha associado ao servidor que você está entrando em contato. Na primeira vez, o GPG solicitará a senha da sua chave GPG para descriptografar o arquivo. Outras vezes, o gpg-agent iniciado automaticamente pela primeira chamada de GPG fornecerá essa senha para você.
Dessa forma, você pode memorizar vários URLs / logins / senhas em um arquivo e armazená-los no seu disco criptografado.
Acho mais conveniente do que um auxiliar de "cache", onde você precisa se lembrar e digitar (uma vez por sessão) uma senha diferente para cada um dos seus serviços remotos, para que a senha seja armazenada em cache na memória.
Com o Git 2.26 (primeiro trimestre de 2020), o auxiliar de credencial de amostra para uso .netrc
foi atualizado para funcionar imediatamente. Veja patch / discussão .
Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu ( Denton-L
) .
(Incorporado por Junio C Hamano - gitster
- in commit 1fd27f8 , 25 dez 2019)
Assinado por: Denton Liu
O caminho shebang para o intérprete Perl git-credential-netrc
foi codificado.
No entanto, alguns usuários podem tê-lo localizado em um local diferente e, portanto, teriam que editar manualmente o script.
Inclua um .perl
prefixo no script para denotá-lo como um modelo e ignore a versão gerada.
Aumentar o Makefile
para que ele gera a git-credential-netrc
partir degit-credential-netrc.perl
, assim como outros scripts Perl.
As receitas Makefile foram descaradamente roubadas contrib/mw-to-git/Makefile
.
E:
Com 2.26 (Q1 2020), o auxiliar de credencial de amostra para usar .netrc foi atualizado para funcionar de maneira imediata.
Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu ( Denton-L
) .
(Incorporado por Junio C Hamano - gitster
- in commit 1fd27f8 , 25 dez 2019)
Assinado por: Denton Liu
Atualmente, git-credential-netrc
não funciona fora de um repositório git. Falha com o seguinte erro:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Porém, não há nenhuma razão real para estar dentro de um repositório. Os auxiliares de credenciais também devem funcionar bem fora do repositório.
Chame a versão não auto config()
para que git-credential-netrc
não precise mais ser executada em um repositório.
Jeff King ( peff
) acrescenta:
Eu suponho que você esteja usando um gpg criptografado netrc
(se não, provavelmente deveria usar credential-store
).
Para acesso à senha "somente leitura", acho que a combinação de pass
com config é um pouco melhor:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"