Git - Como usar o arquivo .netrc no Windows para salvar usuário e senha

172

É possível usar um arquivo .netrc no Windows quando estou usando o Git para clonar um repositório remoto com HTTP e senha de usuário?

Bernd Klaus
fonte

Respostas:

203

É possível usar um .netrcarquivo no Windows?

Sim, você deve:

  • definir variável de ambiente %HOME% (pré-Git 2.0, não é mais necessário com o Git 2.0+)
  • coloque um _netrcarquivo%HOME%

Se você estiver usando o Windows 7/10, em uma CMDsessão, digite:

setx HOME %USERPROFILE%

e o %HOME%será definido como ' C:\Users\"username"'.
Vá para essa pasta ( cd %HOME%) e crie um arquivo chamado ' _netrc'

Nota: Novamente, no Windows, você precisa de um _netrcarquivo ' ', não de um .netrcarquivo ' '.

Seu conteúdo é bastante padrão (substitua <examples>por seus valores):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

Lucas menciona nos comentários:

Usando a versão mais recente do msysgit no Windows 7, não precisei definir a HOMEvariável de ambiente. O _netrcarquivo só fez o truque.

Isso é realmente o que eu mencionei em " Tentando" install"o github, .sshdir not there ":
git-cmd.batincluído no msysgit define a %HOME%variável de ambiente:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

爱国者 acredita nos comentários que "parece que não funcionará para o protocolo http"

No entanto, eu respondi que netrcé usado por curle funciona para o protocolo HTTP, como mostrado neste exemplo (procure por ' netrc' na página):. Também usado com o protocolo HTTP aqui: " _netrc/ .netrcalternativa paracURL ".


Uma armadilha comum com netrc suporte no Windows é que o git ignorará o uso se uma URL https de origem especificar um nome de usuário.

Por exemplo, se o seu .git/config arquivo contiver:

[origem remota]
     buscar = + refs / heads / *: refs / remotes / origin / *
     url = https: //[email protected]/p/my-project/

O Git não resolverá suas credenciais via _netrc, para corrigir isso remova seu nome de usuário, da seguinte maneira:

[origem remota]
     buscar = + refs / heads / *: refs / remotes / origin / *
     url = https://code.google.com/p/my-project/

Solução alternativa: Com a versão 1.7.9+ do git (janeiro de 2012): esta resposta de Mark Longair detalha o mecanismo de cache de credenciais que também permite que você não armazene sua senha em texto sem formatação, como mostrado abaixo.


Com o Git 1.8.3 (abril de 2013):

Agora você pode usar um .netrc criptografado (com gpg).
No Windows: %HOME%/_netrc( _, não ' .')

Um novo auxiliar de credencial somente leitura (pol contrib/) para interagir com os .netrc/.authinfoarquivos foi adicionado.

Esse script permite que você use arquivos netrc criptografados com gpg , evitando o problema de ter suas credenciais armazenadas em um arquivo de texto sem formatação.

Os arquivos com a .gpgextensão serão descriptografados pelo GPG antes da análise.
Vários -fargumentos estão OK. Eles são processados ​​em ordem e a primeira entrada correspondente encontrada é retornada pelo protocolo auxiliar de credenciais.

Quando nenhuma -fopção for dada, .authinfo.gpg, .netrc.gpg, .authinfo, e .netrcarquivos em seu diretório home são usados nesta ordem.

Para habilitar esse auxiliar de credencial:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Observe que o Git git-credential-acrescentará " " o nome do ajudante e o procurará no caminho.)

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

Veja um exemplo completo em " Existe uma maneira de ignorar a digitação de senha ao usarhttps:// github "


Com o Git 2.18+ (junho de 2018), agora você pode personalizar o programa GPG usado para descriptografar o .netrcarquivo criptografado .

Veja 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: gpgopção de aceitação

git-credential-netrcfoi 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'

VonC
fonte
@ Bernd: a HOMEvariável de ambiente é importante, porque não é definida por padrão no Windows. Você pode definir essa variável para o diretório que desejar (não precisa ser C:\users\mylogin): por exemplo, no trabalho, defino-a no meu disco remoto privado associado à minha conta do Windows, o que me permite alternar as áreas de trabalho sem perder. minhas .sshou _netrcconfigurações.
VonC
@Bernd: verifique também se o seu repositório Git está em um servidor LAN ou WAN (internet). Pode ser necessário definir um http.proxyem suas variáveis ​​de ambiente. Ou, pelo contrário, adicione seu servidor a uma no_proxyvariável, para evitar tentar acessar um servidor LAN pela WAN.
VonC
Qual é o nome e o valor da variável ambiental? Você poderia ser um pouco mais específico VonC
Dennis D
@DennisD: as duas variáveis ​​de ambiente de que falo na resposta e nos comentários são HOME e http_proxy. HOME fará referência a qualquer diretório que você desejar. http_proxy fará referência ao endereço de proxy, se você tiver um.
VonC
Usando a versão mais recente do msysgitWindows 7, não precisei definir a HOMEvariável de ambiente. O _netrcarquivo só fez o truque.
Lucas
35

Você também pode instalar o Git Credential Manager para Windows para salvar senhas do Git no gerenciador de credenciais do Windows em vez de _netrc. Essa é uma maneira mais segura de armazenar senhas.

KindDragon
fonte
8
Ótima resposta, essa é a única resposta que encontrei que me permite manter a simplicidade do nome de usuário / senha (com segurança) sem precisar lidar com toda essa porcaria do SSH.
Kirk Woll
@KirkWoll, veja minha resposta de atualização acima: agora você pode armazenar suas credenciais em um .netrcarquivo criptografado . Você não precisará inserir essas credenciais nem uma vez durante a sessão.
VonC
11

Isso permitirá que o Git se autentique no HTTPS usando .netrc:

  • O arquivo deve ser nomeado _netrce localizado em c:\Users\<username>.
  • Você precisará definir uma variável de ambiente chamada HOME=%USERPROFILE%(definir variáveis ​​de ambiente em todo o sistema usando a opção Sistema no painel de controle. Dependendo da versão do Windows, pode ser necessário selecionar "Opções avançadas".).
  • A senha armazenada no _netrcarquivo não pode conter espaços (citar a senha não funcionará).
EBlake
fonte
Solução mais simples e melhor. Funcionou como charme com o Android Studio, Source Tree e linha de comando Git. Eu tive que usar isso quando o Google recomendou a opção credential.helper do Cloud SDK falhou e precisei gerar credenciais manualmente e usar com o arquivo net rc. No meu caso, não precisei das opções 2 e 3. #
Hari
1

Estou publicando uma maneira de usar _netrcpara baixar materiais do site www.course.com.

Se alguém usar o coursera-dl para baixar os materiais de classe aberta em www.coursera.com e no sistema operacional Windows alguém quiser usar um arquivo como ".netrc" que esteja no sistema operacional Unix para adicionar o opção em -nvez de -U <username> -P <password>por conveniência. Ele / ela pode fazer assim:

  1. Verifique o caminho inicial no sistema operacional Windows: setx HOME %USERPROFILE%(consulte a resposta do VonC ). Ele salvará a HOMEvariável de ambiente como C:\Users\"username".

  2. Localize no diretório C:\Users\"username"e crie um nome de arquivo _netrc. NOTA: NÃO existe nenhum sufixo. o conteúdo é como:machine coursera-dl login <user> password <pass>

  3. Use um comando como coursera-dl -n --path PATH <course name>para baixar os materiais da classe. Mais detalhes sobre as opções do coursera-dl para esta página .

BO.LI
fonte