Git - Comment utiliser le fichier .netrc sous Windows pour enregistrer l'utilisateur et le mot de passe

172

Est-il possible d'utiliser un fichier .netrc sous Windows lorsque j'utilise Git pour cloner un référentiel distant avec HTTP et un mot de passe utilisateur?

Bernd Klaus
la source

Réponses:

203

Est-il possible d'utiliser un .netrcfichier sous Windows?

Oui, vous devez:

  • définir la variable d'environnement %HOME%(pré-Git 2.0, n'est plus nécessaire avec Git 2.0+)
  • mettre un _netrcfichier dans%HOME%

Si vous utilisez Windows 7/10, dans une CMDsession, tapez:

setx HOME %USERPROFILE%

et le %HOME%sera réglé sur ' C:\Users\"username"'.
Allez dans ce dossier ( cd %HOME%) et créez un fichier appelé ' _netrc'

Remarque: encore une fois, pour Windows, vous avez besoin d'un _netrcfichier « », pas d' un .netrcfichier « ».

Son contenu est assez standard (remplacez le <examples>par vos valeurs):

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

Luke mentionne dans les commentaires:

En utilisant la dernière version de msysgit sur Windows 7, je n'avais pas besoin de définir la HOMEvariable d'environnement. Le _netrcfichier seul a fait l'affaire.

C'est en effet ce que j'ai mentionné dans " Essayer de" install"github, .sshdir not there ":
git-cmd.batinclus dans msysgit définit la %HOME%variable d'environnement:

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

爱国者 croit dans les commentaires que "il semble que cela ne fonctionnera pas pour le protocole http"

Cependant, j'ai répondu que cela netrcest utilisé par curlet fonctionne pour le protocole HTTP, comme indiqué dans cet exemple (recherchez « netrc» dans la page):. Également utilisé avec le protocole HTTP ici: " _netrc/ .netrcalternative àcURL ".


Un piège courant avec le netrcsupport sur Windows est que git contournera son utilisation si une URL d'origine https spécifie un nom d'utilisateur.

Par exemple, si votre .git/configfichier contient:

["origine" distante]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https: //[email protected]/p/my-project/

Git ne résoudra pas vos informations d'identification via _netrc, pour résoudre ce problème, supprimez votre nom d'utilisateur, comme suit:

["origine" distante]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https://code.google.com/p/my-project/

Solution alternative: Avec git version 1.7.9+ (janvier 2012): Cette réponse de Mark Longair détaille le mécanisme de cache des informations d'identification qui vous permet également de ne pas stocker votre mot de passe en texte brut comme indiqué ci-dessous.


Avec Git 1.8.3 (avril 2013):

Vous pouvez maintenant utiliser un .netrc chiffré (avec gpg).
Sous Windows: %HOME%/_netrc( _, pas ' .')

Un nouvel assistant d'identification en lecture seule (in contrib/) pour interagir avec les .netrc/.authinfofichiers a été ajouté.

Ce script vous permettrait d' utiliser des fichiers netrc cryptés par gpg , évitant ainsi le problème de stocker vos informations d'identification dans un fichier texte brut.

Les fichiers avec l' .gpgextension seront décryptés par GPG avant l'analyse.
Les -farguments multiples sont OK. Ils sont traités dans l'ordre et la première entrée correspondante trouvée est renvoyée via le protocole d'assistance d'identification.

Lorsqu'aucune -foption est donnée, .authinfo.gpg, .netrc.gpg, .authinfo, et les .netrcfichiers dans votre répertoire sont utilisés dans cet ordre.

Pour activer cet assistant d'identification:

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

(Notez que Git ajoutera " git-credential-" au nom de l'assistant et le recherchera dans le chemin.)

# 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'

Voir un exemple complet sur " Existe-t-il un moyen d'ignorer la saisie de mot de passe lors de l'utilisationhttps:// github "


Avec Git 2.18+ (juin 2018), vous pouvez désormais personnaliser le programme GPG utilisé pour décrypter le .netrcfichier crypté .

Voir commit 786ef50 , commit f07eeed (12 mai 2018) par Luis Marsano (``) .
(Fusionné par Junio ​​C Hamano - gitster- dans commit 017b7c5 , 30 mai 2018)

git-credential-netrc: accepter l' gpgoption

git-credential-netrca été codé en dur pour déchiffrer avec « gpg» quelle que soit l'option gpg.program.
C'est un problème sur les distributions comme Debian qui appellent GnuPG moderne autre chose, comme ' gpg2'

VonC
la source
@Bernd: la HOMEvariable d'environnement est importante, car elle n'est pas définie par défaut sous Windows. Vous pouvez définir cette variable dans le répertoire de votre choix (ce n'est pas nécessaire C:\users\mylogin): par exemple, au travail, je la place sur mon disque distant privé associé à mon compte Windows, ce qui me permet de changer de bureau sans avoir à perdre mes paramètres .sshou _netrc.
VonC
@Bernd: vérifiez également si votre dépôt Git est sur un serveur LAN ou WAN (Internet). Vous devrez peut-être définir un http.proxydans vos variables d'environnement. Ou, au contraire, pour ajouter votre serveur à une no_proxyvariable, pour éviter d'essayer d'accéder à un serveur LAN via WAN.
VonC
Quel est le nom et la valeur de la variable environnementale? Pourriez-vous être un peu plus précis VonC
Dennis D
@DennisD: les deux variables d'environnement dont je parle dans la réponse et dans les commentaires sont HOME et http_proxy. HOME référencera le répertoire de votre choix. http_proxy fera référence à l'adresse proxy si vous en avez une.
VonC
En utilisant la dernière version de msysgitsur Windows 7, je n'avais pas besoin de définir la HOMEvariable d'environnement. Le _netrcfichier seul a fait l'affaire.
Luke
35

Vous pouvez également installer Git Credential Manager for Windows pour enregistrer les mots de passe Git dans le gestionnaire d'informations d'identification Windows au lieu de _netrc. Il s'agit d'un moyen plus sûr de stocker les mots de passe.

KindDragon
la source
8
Excellente réponse, c'est la seule réponse que j'ai trouvée qui me permet de conserver la simplicité du nom d'utilisateur / mot de passe (en toute sécurité) sans avoir à gérer toutes ces conneries SSH.
Kirk Woll
@KirkWoll voir ma réponse de mise à jour ci-dessus: vous pouvez maintenant stocker vos informations d'identification dans un .netrcfichier crypté . Vous n'aurez pas à saisir ces informations une seule fois pendant la session.
VonC
11

Cela permettra à Git de s'authentifier sur HTTPS en utilisant .netrc:

  • Le fichier doit être nommé _netrcet situé dans c:\Users\<username>.
  • Vous devrez définir une variable d'environnement appelée HOME=%USERPROFILE%(définir les variables d'environnement à l'échelle du système à l'aide de l'option Système du panneau de configuration. Selon la version de Windows, vous devrez peut-être sélectionner «Options avancées».).
  • Le mot de passe stocké dans le _netrcfichier ne peut pas contenir d'espaces (l'indication du mot de passe ne fonctionnera pas).
EBlake
la source
La solution la plus simple et la meilleure. Fonctionne comme du charme avec Android Studio, Source Tree et la ligne de commande Git. J'ai dû l'utiliser lorsque l'option credential.helper du SDK Cloud a échoué et que j'ai dû générer manuellement les informations d'identification et les utiliser avec le fichier net rc. Dans mon cas, je n'avais pas besoin des options 2 et 3.
Hari
1

Je publie un moyen d'utiliser _netrcpour télécharger des documents à partir du site www.course.com.

Si quelqu'un veut utiliser le coursera-dl pour télécharger les matériaux de classe ouverte sur www.coursera.com, et sur le système d'exploitation Windows, quelqu'un veut utiliser un fichier comme ".netrc" qui est dans le système d'exploitation comme-Unix pour ajouter le option -nau lieu de -U <username> -P <password>pour plus de commodité. Il / elle peut le faire comme ceci:

  1. Vérifiez le chemin d'accès à la maison sur le système d'exploitation Windows: setx HOME %USERPROFILE%(reportez-vous à la réponse de VonC ). Cela enregistrera la HOMEvariable d'environnement sous C:\Users\"username".

  2. Recherchez dans le répertoire C:\Users\"username"et créez un nom de fichier _netrc. REMARQUE: il n'y a AUCUN suffixe. le contenu est comme:machine coursera-dl login <user> password <pass>

  3. Utilisez une commande comme coursera-dl -n --path PATH <course name>pour télécharger le matériel de classe. Plus de détails sur les options coursera-dl pour cette page .

BO.LI
la source