2011-05-31 12 views
65

¿Hay alguna manera de dejar que git recuerde mis credenciales cuando me conecto a repositorios remotos a través de HTTP (S)?Git http: credenciales seguras para recordar

He intentado el enfoque core.askpass detallado en git-config para permitir que un script externo proporcione mis credenciales. Aunque funciona muy bien, el nombre de usuario y la contraseña aún se almacenan en texto plano en el script de shell pequeño.

+4

Desde diciembre de 2011 (versión de Git 1.7.8) puede utilizar los ** ayudantes de credenciales **, vea mi respuesta: http://stackoverflow.com/a/12938677/46058 –

+1

Ahora puede tener un ' ¡archivo netrc'! Ver [mi respuesta a continuación] (http://stackoverflow.com/a/16164673/6309) – VonC

Respuesta

61

git invoca cURL cuando se ejecuta a través de HTTP. Puede almacenar credenciales seguras configurando un archivo .netrc en el directorio de inicio de su usuario y haciéndolo privado para el usuario (0600 en Linux).

El contenido del archivo proporciona el nombre de usuario y la contraseña por dominio remoto.

machine myRemoteServer 
login myUserName 
password s3cret 

Ver https://stackoverflow.com/questions/3947530/git-push-fatal-failed/7177690#7177690 para la configuración del lado del servidor completo, que puede incluir fácilmente las llamadas a su servidor LDAP.

+2

Esto es más seguro que escribir contraseñas en el comando porque los archivos de historial de comandos son legibles en todo el mundo, mientras que .netrc debería ocultarse explícitamente a nadie, excepto al usuario propietario. Ejemplo sobre linux/cygwin de bash_history los permisos del archivo (-rw-r - r-- 1 myName Domain Users 8955 Ago 24 12:53 .bash_history) – Eddie

+3

eso también es cierto porque evita que la cadena de contraseña sea visible en el mundo en la salida de 'ps -ax' mientras Los comandos de Git se están ejecutando. –

+0

Ver también [Git - Cómo usar el archivo .netrc en Windows para guardar el usuario y la contraseña] (http://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on-windows-to -save-user-and-password) –

2

La opción segura es usar SSH regular con par de claves pública/privada.

+1

@John, estoy declinando: El transporte HTTPS correcto y autenticado es tan seguro como SSH, entre el cliente y el servidor de Git. En organizaciones más grandes, una provisión/revocación centralizada de una sola cuenta de acceso de usuarios es una limitación muy común. AFAIK, OpenSSH solo puede manejar pubkeys de usuario en archivos locales, NO a través de búsquedas de directorio (por ejemplo, LDAP). –

+2

@ RyanB.Lynch: FYI hay OpenSSH-LPK para almacenar claves públicas en LDAP, pero está * parcheado * OpenSSH http://code.google.com/p/openssh-lpk/ –

44

Puesto que (creo) versión 1.7.8 git, del 2 de diciembre 2011 1), git Apoya a las llamadas credenciales ayudantes:
ver gitcredentials(7) página de manual

(Esta página de manual también describe dónde core.askpass cabe en esto).

La instalación git por defecto incluye dos ayudantes:

  • caché: Ver git-credential-cache(1) para más detalles.

    Credenciales de caché en memoria durante un período corto de tiempo. Las credenciales almacenadas nunca tocan el disco y se olvidan después de un tiempo de espera configurable.

  • tienda: Consulte git-credential-store(1) para más detalles.

    Almacenar las credenciales de forma indefinida en el disco. El archivo tendrá sus permisos de sistema de archivos configurados para evitar que otros usuarios en el sistema lo lean, pero no serán encriptados ni protegidos de ninguna otra manera. La misma seguridad que .netrc solución en Eddie response


Hay algunos ayudantes de credenciales de terceros para almacenar nombre de usuario y contraseña en kdewallet (KDE), en GNOME Keyring, en Windows Credential Store, en MacOS X llavero, etc.


Notas al pie:

1) la página de ayuda Set Up Git GitHub menciona que

Usted necesita git 1.7.10 o posterior para utilizar el ayudante de credenciales

+1

El método de caché de credenciales funciona sin problemas con Git 1.7.9.5 bajo Ubuntu 12.04. Gracias por los consejos. – MKroehnert

+3

Gracias - esto me funcionó: git config credential.helper store –

13

Desde git 1.8.3 (mayo de 2013), ahora se puede especificar una cifrado .netrc para git de empleo:

Un new read-only credential helper (en contrib/credential/netrc/) para interactuar con los archivos .netrc/.authinfo se ha añadido.

Ese guión le permitiría a uso de archivos cifrados Netrc GPG-, evitando el problema de tener sus credenciales almacenadas en un archivo de texto plano.

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

archivos con la extensión .gpg será descifrado por GPG antes de analizar.
Múltiples argumentos -f están bien. Se procesan en orden y la primera entrada coincidente encontrada se devuelve mediante el protocolo de ayuda de credenciales (consulte a continuación).

Cuando se da ninguna opción -f, .authinfo.gpg, .netrc.gpg, .authinfo y .netrc archivos en el directorio de inicio se utilizan en este orden.

Para activar esta ayuda de credenciales:

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

(. Tenga en cuenta que Git antepondrá "git-credential-" al nombre del ayudante y buscarlo en el camino)


Ver a ejemplo completo paso a paso en:
"Is there a way to skip password typing when using https://github.com".

Cuestiones relacionadas