web-dev-qa-db-fra.com

Git http - mémoriser en toute sécurité les informations d'identification

Existe-t-il un moyen de laisser git se souvenir de mes informations d'identification lors de la connexion à des référentiels distants via HTTP (S)?

J'ai essayé le core.askpass approche détaillée dans git-config pour laisser un script externe fournir mes informations d'identification. Bien qu'il fonctionne très bien, le nom d'utilisateur et le mot de passe sont toujours stockés en texte brut dans le petit script Shell.

66
Johan Sjöberg

git appelle cURL lors de l'exécution sur HTTP. Vous pouvez stocker des informations d'identification sécurisées en configurant un .netrc fichier dans le répertoire personnel de votre utilisateur, et le rendre privé pour l'utilisateur (0600 sous Linux).

Le contenu du fichier fournit le nom d'utilisateur et le mot de passe par domaine distant.

machine myRemoteServer
login myUserName
password s3cret

Voir https://stackoverflow.com/questions/3947530/git-Push-fatal-failed/7177690#717769 pour la configuration complète côté serveur, qui peut facilement inclure des appels à votre serveur LDAP.

63
Eddie

Depuis (je pense) git version 1.7.8, à partir du 2 décembre 20111), git prend en charge les soi-disant assistants d'informations d'identification .

Voir gitcredentials (7) page de manuel pour plus de détails
(Cette page de manuel décrit également où core.askpass correspond à cela).

L'installation par défaut de git comprend deux assistants:

  • cache : Voir git-credential-cache (1) pour plus de détails.

    Cachez les informations d'identification en mémoire pendant une courte période. Les informations d'identification stockées ne touchent jamais le disque et sont oubliées après un délai configurable. Notez qu'il s'agit d'une solution Unix uniquement, car elle utilise le socket pour communiquer avec le démon.

  • store : Voir git-credential-store (1) pour plus de détails.

    Stockez les informations d'identification indéfiniment sur le disque. Le fichier aura ses autorisations de système de fichiers définies pour empêcher les autres utilisateurs du système de le lire, mais ne sera pas chiffré ou protégé d'une autre manière. La même sécurité que .netrc solution dans réponse Eddie


Il existe des assistants d'identification tiers pour stocker le nom d'utilisateur et le mot de passe dans KDEWallet (KDE), dans Porte-clés GNOME , dans Windows Credential Store (ceci est maintenant intégré dans Git pour Windows ), dans le trousseau MacOS X, etc.


Notes:

1) La page Configurer Git Aide de GitHub mentionne que

Vous avez besoin de git 1.7.10 ou plus récent pour utiliser l'assistant d'informations d'identification

50
Jakub Narębski

Depuis git 1.8. (mai 2013), vous pouvez maintenant spécifier un _ crypté .netrc pour que git utilise:

A nouvel assistant d'identification en lecture seule (in contrib/credential/netrc/ ) pour interagir avec le .netrc/.authinfo fichiers ont été ajoutés.

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

-f|--file AUTHFILE
specify netrc-style files.  

Fichiers avec le .gpg l'extension sera décryptée par GPG avant l'analyse.
Plusieurs -f les arguments 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 (voir ci-dessous).

Quand non -f option est donnée, .authinfo.gpg, .netrc.gpg, .authinfo, et .netrc les fichiers de votre répertoire personnel sont utilisés dans cet ordre.

Pour activer cet assistant d'informations d'identification:

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

(Notez que Git ajoutera "git-credential- "au nom de l'assistant et recherchez-le dans le chemin d'accès.)


Voir un exemple pas à pas complet sur:
" Existe-t-il un moyen d'ignorer la saisie du mot de passe lorsque vous utilisez https://github.com ".

14
VonC

L'option sécurisée consiste à utiliser SSH standard avec une paire de clés publique/privée.

2
John
1
Clintm