Pregunta ¿Hay alguna manera de saltear la escritura de contraseña al usar https: // en GitHub?


Recientemente cambié a la sincronización de mis repositorios a https: // en GitHub (debido a problemas con el firewall), y siempre solicita una contraseña. Solía ​​ser que tenía una SSH certificado, y fue suficiente. ¿Hay alguna forma de eludir la contraseña en mi caso (usando http / https)?


1621
2018-03-17 17:47


origen


Respuestas:


Con Git versión 1.7.9 y posterior

Desde Git 1.7.9 (lanzado a finales de enero de 2012), hay un mecanismo ordenado en Git para evitar tener que escribir su contraseña todo el tiempo para HTTP / HTTPS, llamado ayudantes de credenciales. (Gracias a dazónico para señalar esta nueva característica en los comentarios a continuación).

Con Git 1.7.9 o posterior, puede usar uno de los siguientes credenciales de ayuda:

git config --global credential.helper cache

... que le dice a Git que mantenga su contraseña almacenada en la memoria (por defecto) durante 15 minutos. Puede establecer un tiempo de espera más largo con:

git config --global credential.helper "cache --timeout=3600"

(Ese ejemplo fue sugerido en el Página de ayuda de GitHub para Linux.) También puede almacenar sus credenciales permanentemente si así lo desea, consulte las otras respuestas a continuación.

La ayuda de GitHub también sugiere que si estás en Mac OS X y usas Homebrew Para instalar Git, puede usar el keystore de Mac OS X nativo con:

git config --global credential.helper osxkeychain

Para Windows, hay un ayudante llamado Git Credential Manager para Windows o wincred en msysgit.

git config --global credential.helper wincred # obsolete

Con Git para Windows 2.7.3+ (Marzo de 2016):

git config --global credential.helper manager

Para Linux, puedes utilizar gnome-keyring(u otra implementación de keyring como KWallet).

Con las versiones de Git anteriores a 1.7.9

Con las versiones de Git anteriores a la 1.7.9, esta opción más segura no está disponible, y deberá cambiar la URL que su origin usos remotos para incluir la contraseña de esta manera:

https://you:password@github.com/you/example.git

... en otras palabras, con :password después del nombre de usuario y antes del @.

Puede establecer una nueva URL para su origin remoto con:

git config remote.origin.url https://you:password@github.com/you/example.git

Asegúrate de usar https y debe tener en cuenta que si hace esto, su contraseña de GitHub se almacenará en texto claro en su .git directorio, que obviamente es indeseable.

Con cualquier versión de Git (bueno, desde la versión 0.99)

Un enfoque alternativo es poner su nombre de usuario y contraseña en su ~/.netrc archivo, aunque, al igual que con la conservación de la contraseña en la URL remota, esto significa que su contraseña se almacenará en el disco en texto plano y, por lo tanto, es menos segura y no se recomienda. Sin embargo, si desea tomar este enfoque, agregue la siguiente línea a su ~/.netrc:

machine <hostname> login <username> password <password>

... reemplazando <hostname> con el nombre de host del servidor, y <username> y <password> con tu nombre de usuario y contraseña Recuerde también establecer permisos restrictivos para el sistema de archivos en ese archivo:

chmod 600 ~/.netrc

Tenga en cuenta que en Windows, este archivo debe ser llamado _netrc, y es posible que deba definir la variable de entorno% HOME% - para obtener más detalles, consulte:


2133
2018-03-17 17:54



También puede hacer que Git almacene sus credenciales permanentemente usando lo siguiente:

git config credential.helper store

Nota: Si bien es conveniente, Git almacenará sus credenciales en texto claro en un archivo local (.git-credentials) debajo del directorio de su proyecto (vea a continuación el directorio "home"). Si no te gusta esto, elimina este archivo y cambia a usar el opción de caché

Si desea que Git vuelva a pedirle credenciales cada vez que necesite conéctese al repositorio remoto, puede ejecutar este comando:

git config --unset credential.helper

Para almacenar las contraseñas en .git-credentials en tus %HOME% directorio en lugar del directorio del proyecto: use el --global bandera

git config --global credential.helper store

638
2017-09-03 01:14



TLDR; Use una archivo netrc encriptado con Git 1.8.3+.

Guardar una contraseña para un repositorio Git HTTPS URL es posible con un ~/.netrc (Unix) o %HOME%/_netrc (nota la _) en Windows.

Pero: Ese archivo almacenaría su contraseña en texto sin formato.

Solución: Cifre ese archivo con GPG (GNU Privacy Guard), y haga que Git lo desencripte cada vez que necesite una contraseña (para push/pull/fetch/clone operación).


Nota: con Git 2.18 (Q2 2018), ahora puede personalizar el GPG utilizado para descifrar el cifrado .netrc archivo.

Ver cometer 786ef50, cometer f07eeed (12 de mayo de 2018) por Luis Marsano (``).
(Fusionado por Junio ​​C Hamano - gitster - en cometer 017b7c5, 30 de mayo de 2018) 

git-credential-netrc: aceptar gpg opción

git-credential-netrc fue codificado para descifrar con 'gpg' a pesar de   la opción gpg.program.
  Este es un problema en distribuciones como Debian que llaman a GnuPG moderno algo más, como 'gpg2'


Instrucciones paso a paso para Windows

Con Windows:

(Git tiene un gpg.exe en su distribución, pero el uso de una instalación completa de GPG incluye una gpg-agent.exe, que memorizará su frase de contraseña asociada a su clave GPG.)

  • Instalar gpg4Win Lite, la interfaz mínima de línea de comandos gnupg (tomar el más reciente gpg4win-vanilla-2.X.Y-betaZZ.exe), y complete su PATH con el directorio de instalación de GPG:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
    

(Nota la 'copy'comando: Git necesitará un script Bash para ejecutar el comando'gpg'. Ya que gpg4win-vanilla-2 viene con gpg2.exe, necesitas duplicarlo).

  • Crea o importa una clave GPG y confía en ella:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(Asegúrese de poner una frase de contraseña en esa clave).

  • Confía en esa clave

  • Instale el script de ayuda credencial en un directorio dentro de su %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
    

(Sí, este es un script de Bash, pero funcionará en Windows, ya que Git lo llamará).

  • Haga un archivo _netrc en texto claro

    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
    

(No te olvides de 'protocol'parte:'http'o'https'dependiendo de la URL que usarás)

  • Cifre ese archivo:

    gpg -e -r a_recipient _netrc
    

(Ahora puedes borrar el _netrc archivo, manteniendo solo el _netrc.gpg encriptado)

  • Usa ese archivo encriptado:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(Nota la '/': C:\path\to... no funcionaría en absoluto.) (Puede usar al principio -v -d para ver qué está pasando.)

A partir de ahora, cualquier comando de Git que use una URL HTTP (S) que requiera autenticación descifrará ese _netrc.gpgarchive y use el nombre de usuario / contraseña asociado al servidor con el que está contactando. La primera vez, GPG le pedirá la contraseña de su clave GPG para descifrar el archivo. Las otras veces, el agente gpg lanzado automáticamente en la primera llamada GPG le proporcionará esa frase de contraseña.

De esa forma, puedes memorizar varios URLs / inicios de sesión / contraseñas en un archivo, y tenerlo almacenado en su disco encriptado.
Lo encuentro más conveniente que un "caché" auxiliar, donde necesita recordar y escribir (una vez por sesión) una contraseña diferente para cada uno de sus servicios remotos, para que dicha contraseña se guarde en la memoria.


85
2017-08-21 15:48



Existe una forma sencilla y anticuada de almacenar credenciales de usuario en una URL HTTPS:

https://user:password@github.com/...

Puedes cambiar la URL con git remote set-url <remote-repo> <URL>

La desventaja obvia de ese enfoque es que debe almacenar la contraseña en texto sin formato. Todavía puede ingresar el nombre de usuario (https://user@github.com/...) que al menos le ahorrará la mitad de la molestia.

Es posible que prefiera cambiar a SSH o utilizar el software de cliente GitHub.


32
2018-01-06 16:43



Usa una tienda de credenciales

Para git 2.11+ en OSX y linux, use la tienda de credenciales incorporada de git:

git config --global credential.helper libsecret

Para msysgit 1.7.9+ en Windows:

git config --global credential.helper wincred

Para Git 1.7.9+ en OS X, use:

git config --global credential.helper osxkeychain

30
2017-09-09 03:57



Puedes simplemente usar

git config credential.helper store

Cuando ingrese la contraseña la próxima vez con tirar o empujar, se almacenará en .git-credentials como texto sin formato (un poco inseguro, pero solo póngalo en la carpeta protegida)

Y eso es todo, como se indica en esta página:

https://git-scm.com/docs/git-credential-store


30
2017-09-21 13:03



Probablemente estoy siendo un poco lento, pero no fue inmediatamente obvio para mí que primero tenía que descargar el ayudante. Encontré la descarga credential.helper en Atlassian se autentica permanentemente con repositorios de Git, Espero eso ayude.

Citar:

Siga estos pasos si desea usar Git con caché de credenciales en OSX:

Descarga el binario git-credential-osxkeychain.

Ejecute el siguiente comando para asegurarse de que el binario sea ejecutable:

chmod a+x git-credential-osxkeychain

Ponlo en el directorio / usr / local / bin.

Ejecute el siguiente comando:

git config --global credential.helper osxkeychain

18
2017-10-05 05:31



En una configuración de GNU / Linux, un ~ / .netrc funciona bastante bien también:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Puede depender de las bibliotecas de red en las que Git esté utilizando HTTPS transporte.


18
2017-12-05 13:28



Simplemente incluya las credenciales de inicio de sesión como parte de la URL:

git remote rm origin 
git remote add origin https://username:mypassword@github.com/path/to/repo.git

15
2017-07-03 07:13



Para Windows puedes usar Gerente de credenciales de Git (GCM) complemento. Actualmente es mantenido por Microsoft. Lo bueno es que guarda la contraseña en la tienda de credenciales de Windows, no como texto sin formato.

Hay un instalador en el página de lanzamientos del proyecto. Esto también instalará la versión oficial de git-for-windows con el administrador de credenciales incorporado. Permite la autenticación de 2 factores para github (y otros servidores). Y tiene una interfaz gráfica para iniciar sesión inicialmente.

Para los usuarios de cygwin (o los usuarios que ya usan el git-for-windows oficial), es posible que prefiera la instalación manual. Descargue el paquete zip del página de lanzamientos. Extraiga el paquete y luego ejecute el install.cmd. Esto instalará a su ~/bin carpeta. (Asegúrese de que su ~/bin directorio está en su PATH.) Luego lo configura usando este comando:

git config --global credential.helper manager

Git luego ejecutará el git-credential-manager.exe al autenticarse en cualquier servidor.


12
2018-05-24 07:49



Si no quiere guardar su contraseña en texto plano como lo dijo Mark, puede usar una URL github diferente para obtenerla que para presionar. En tu archivo de configuración, debajo [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

Todavía pedirá una contraseña cuando presione, pero no cuando busque, al menos para proyectos de código abierto.


11
2018-03-19 08:12