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

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

Con Git versión 1.7.9 y posterior

Desde Git 1.7.9 (lanzado a fines de enero de 2012), hay un mecanismo orderado en Git para evitar tener que escribir su contraseña todo el time para HTTP / HTTPS, llamados ayudantes de cnetworkingenciales . (Gracias a dazonic por 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 cnetworkingenciales de ayuda:

 git config --global cnetworkingential.helper cache 

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

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

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

La ayuda de GitHub también sugiere que si usas Mac OS X y usaste Homebrew para instalar Git, puedes usar el keystore original de Mac OS X con:

 git config --global cnetworkingential.helper osxkeychain 

Para Windows, hay un asistente llamado Git Cnetworkingential Manager para Windows o wincnetworking en msysgit .

 git config --global cnetworkingential.helper wincnetworking # obsolete 

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

 git config --global cnetworkingential.helper manager 

Para Linux, puede usar 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 usa su control remoto de origin para include 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 de @ .

Puede establecer una nueva URL para su control remoto de origin con:

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

Asegúrese de utilizar https y debe tener en count que si hace esto, su contraseña de GitHub se almacenará en text sin formatting en su directory .git , lo cual es obviamente 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 file ~/.netrc , aunque, al igual que mantener la contraseña en la URL remota, esto significa que su contraseña se almacenará en el disco en text plano y, por lo tanto, es less segura y no recomendado. Sin embargo, si desea seguir este enfoque, agregue la siguiente línea a su ~/.netrc :

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

… reemplazando <hostname> con el nombre de host del server, y <username> y <password> con su nombre de usuario y contraseña. Recuerde también establecer permissions restrictivos para el sistema de files en ese file:

 chmod 600 ~/.netrc 

Tenga en count que en Windows, este file debe llamarse _netrc y es posible que deba definir la variable de entorno% HOME%. Para get más información, consulte:

  • Git – Cómo usar el file .netrc en Windows para save usuario y contraseña

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

 git config cnetworkingential.helper store 

Nota: Si bien es conveniente, Git almacenará sus cnetworkingenciales en text claro en un file local (.git-cnetworkingentials) en su directory de proyectos (ver a continuación el directory "home"). Si no le gusta esto, elimine este file y cambie a usar la opción de caching.

Si desea que Git vuelva a pedirle cnetworkingenciales cada vez que necesite conectarse al repository remoto, puede ejecutar este command:

 git config --unset cnetworkingential.helper 

Para almacenar las passwords en .git-cnetworkingentials en su directory %HOME% en lugar del directory del proyecto: use la bandera --global

 git config --global cnetworkingential.helper store 

TLDR; Use un file netrc encriptado con Git 1.8.3+ .

Guardar una contraseña para un repository Git La URL HTTPS es posible con un ~/.netrc (Unix) o %HOME%/_netrc (tenga en count el _ ) en Windows.

Pero : ese file almacenaría su contraseña en text sin formatting.

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


Instrucciones paso a paso para Windows

Con Windows:

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

  • Instale gpg4Win Lite , la interfaz de command-line gnupg mínima (tome el gpg4win-vanilla-2.XY-betaZZ.exe más reciente ) y complete su RUTA con el directory de installation de GPG:

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

(Observe el command ' copy ': Git necesitará un script Bash para ejecutar el command ' gpg '. Dado que gpg4win-vanilla-2 viene con gpg2.exe , necesita duplicarlo).

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

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

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

  • Confía en esa key

  • Instale el script de ayuda cnetworkingencial en un directory dentro de su %PATH% :

     cd c:\a\fodler\in\your\path curl -oc:\prgs\bin\git-cnetworkingential-netrc https://raw.githubusercontent.com/git/git/master/contrib/cnetworkingential/netrc/git-cnetworkingential-netrc 

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

  • Haga un file _netrc en text 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 olvide la parte del ' protocol ': ' http ' o ' https ' según la URL que use).

  • Cifre ese file:

     gpg -e -r a_recipient _netrc 

(Ahora puede eliminar el file _netrc , manteniendo solo el _netrc.gpg encriptado).

  • Usa ese file encriptado:

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

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

A partir de ahora, cualquier command de Git que utilice una URL HTTP (S) que requiera authentication descifrará ese file _netrc.gpg y utilizará el nombre de usuario / contraseña asociados al server con el que se está contactando. La primera vez, GPG le pedirá la contraseña de su key GPG para descifrar el file. Las otras veces, el agente gpg lanzado automáticamente en la primera llamada GPG le proporcionará esa frase de contraseña.

De esta forma, puede memorizar varias URL / inicios de session / passwords en un file, y tenerlo almacenado en su disco encryption.
Lo encuentro más conveniente que un "caching" auxiliar, donde necesita recordar y escribir (una vez por session) una contraseña diferente para cada uno de sus services remotos, para que dicha contraseña se guarde en la memory.

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

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

Puede 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 text sin formatting. Todavía puede ingresar el nombre de usuario ( https://user@github.com/... ) que al less le ahorrará la mitad de la molestia.

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

Usa una tienda de cnetworkingenciales

Para git 2.11+ en OSX y Linux , use la tienda de cnetworkingenciales incorporada de git :

 git config --global cnetworkingential.helper libsecret 

Para msysgit 1.7.9+ en Windows :

 git config --global cnetworkingential.helper wincnetworking 

Para Git 1.7.9+ en OS X, use:

 git config --global cnetworkingential.helper osxkeychain 

Puedes simplemente usar

 git config cnetworkingential.helper store 

Cuando ingrese la contraseña la próxima vez con "pull" o "push", se almacenará en .git-cnetworkingentials como text sin formatting (un poco inseguro, pero simplemente colóquelo en la carpeta protegida)

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

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

Probablemente estoy siendo un poco lento, pero no fue inmediatamente obvio para mí que primero tenía que download el ayudante. Encontré la descarga cnetworkingential.helper en Atlassian's Autenticación permanente con repositorys Git , espero que ayude.

Citar:

Siga estos pasos si desea usar Git con caching de cnetworkingenciales en OSX:

Descarga el binary git-cnetworkingential-osxkeychain.

Ejecute el siguiente command para asegurarse de que el binary sea ejecutable:

 chmod a+x git-cnetworkingential-osxkeychain 

Ponlo en el directory / usr / local / bin.

Ejecute el siguiente command:

 git config --global cnetworkingential.helper osxkeychain 

En una configuration 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 networking que Git esté utilizando para el transporte HTTPS .

Simplemente incluya las cnetworkingenciales de inicio de session como parte de la URL:

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

Para Windows puede usar el complemento Git Cnetworkingential Manager (GCM). Actualmente es mantenido por Microsoft. Lo bueno es que guarda la contraseña en la tienda de cnetworkingenciales de Windows, no como text sin formatting.

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

Para los usuarios de cygwin (o los usuarios que ya usan el git-for-windows oficial), es posible que prefiera la installation manual. Descargue el package zip de la página de lanzamientos . Extraiga el package y luego ejecute install.cmd . Esto se instalará en su carpeta ~/bin . (Asegúrese de que su directory ~/bin esté en su RUTA). A continuación, configúrelo utilizando este command:

 git config --global cnetworkingential.helper manager 

Git ejecutará git-cnetworkingential-manager.exe cuando se autentique en cualquier server.

Si no quiere save su contraseña en text plano como lo dijo Mark, puede usar una URL github diferente para getla que para presionar. En su file de configuration, en [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 less para proyectos de código abierto.

Puede usar ayudantes de cnetworkingenciales.

 git config --global cnetworkingential.helper 'cache --timeout=x' 

donde x es la cantidad de segundos.

OAuth

Puede crear su propio token de API personal ( OAuth ) y usarlo de la misma manera que usaría sus cnetworkingenciales normales (en: /settings/tokens ). Por ejemplo:

 git remote add fork https://4UTHT0KEN@github.com/foo/bar git push fork 

.netrc

Otro método es usar configure su usuario / contraseña en ~/.netrc ( _netrc en Windows), por ej.

 machine github.com login USERNAME password PASSWORD 

Para https:

 machine github.com login USERNAME password PASSWORD protocol https 

una ayuda cnetworkingencial

Para almacenar en caching su contraseña de GitHub en Git cuando usa HTTPS, puede usar un asistente de cnetworkingenciales para decirle a Git que recuerde su nombre de usuario y contraseña de GitHub cada vez que hable con GitHub.

  • Mac: git config --global cnetworkingential.helper osxkeychain (se requiere osxkeychain helper ),
  • Windows: git config --global cnetworkingential.helper wincnetworking
  • Linux y otros: git config --global cnetworkingential.helper cache

Relacionado:

  • ¿Cómo almacenar su contraseña de GitHub https en Linux en un llavero de terminal?
  • ¿Cómo me aseguro de que Git no me pida mi nombre de usuario y contraseña de GitHub?
  • Configure los clientes de Git, como GitHub para Windows, para no solicitar authentication
  • Llevando un repo local a un repository de GitHub que tiene authentication de doble factor

Se debe usar un token de authentication en lugar de la contraseña de la count. Vaya a las configuraciones / aplicaciones de GitHub y luego cree un token de acceso personal. El token se puede usar de la misma manera que se usa una contraseña.

El token está destinado a permitir que los usuarios no usen la contraseña de la count para el trabajo del proyecto. Solo use la contraseña cuando realice tareas de administración, como crear nuevos tokens o revocar tokens antiguos.


En lugar de un token o una contraseña que otorga al usuario acceso total a una count de GitHub, se puede utilizar una key de implementación específica del proyecto para otorgar acceso a un único repository de proyecto. Se puede configurar un proyecto de Git para utilizar esta key diferente en los siguientes pasos cuando aún puede acceder a otras counts o proyectos de Git con su cnetworkingencial normal:

  1. Escriba un file de configuration SSH que contenga el Host , IdentityFile para la key de implementación, tal vez el UserKnownHostsFile , y tal vez el User (aunque creo que no lo necesita).
  2. Escriba un script de shell contenedor SSH que virtualmente es ssh -F /path/to/your/config $*
  3. GIT_SSH=/path/to/your/wrapper frente a su command Git normal. Aquí el git remote (origen) debe usar el git@github.com:user/project.git .

Las cosas son un poco diferentes si estás usando authentication de dos factores como yo. Como no encontré una buena respuesta en otro lugar, voy a poner una aquí para que pueda encontrarla más tarde.

Si está utilizando la authentication de dos factores, especificar el nombre de usuario / contraseña ni siquiera funcionará: se obtiene acceso denegado. Pero puede usar un token de acceso a la aplicación y usar el asistente de cnetworkingenciales de Git para savelo en caching. Aquí están los enlaces pertinentes:

  • Configuración de la command-line para trabajar con authentication de 2 factores (busque la sección titulada "¿Cómo funciona para Git de command-line?")
  • Almacenamiento en caching de cnetworkingenciales

Y no recuerdo dónde vi esto, pero cuando te piden tu nombre de usuario, ahí es donde guardas el token de acceso a la aplicación. Luego deja la contraseña en blanco. Funcionó en mi Mac.

Después de clonar un repo , puede editar repo/.git/config y agregar alguna configuration como la siguiente:

 [user] name = you_name password = you_password [cnetworkingential] helper = store 

Entonces no se le pedirá el username de username y la password nuevamente.

Es mejor usar cnetworkingenciales para security, pero puede mantenerlo por un time usando caching

 git config --global cnetworkingential.helper cache git config cnetworkingential.helper 'cache --timeout=3600' 

Sus cnetworkingenciales se saveán durante 3600 segundos.

Recibí mi respuesta de gitcnetworkingentials (7) Página manual . Para mi caso, no tengo cnetworkingencial-caching en mi installation de Windows; Yo uso cnetworkingencial-store.

Después de usar cnetworkingencial-store, el nombre de usuario / contraseña se almacenan en el file [carpeta de usuario] /. Git-cnetworkingentials. Para eliminar el nombre de usuario / contraseña, simplemente elimine el contenido del file.

Esto funciona para mí Estoy usando Windows 10

 git config --global cnetworkingential.helper wincnetworking 

Sé que esta no es una solución segura, pero a veces solo necesitas una solución simple, sin instalar nada más. Y como helper = store no funcionó para mí, creé un simulador de ayuda:

Cree un script y colóquelo en la carpeta bin de su usuario, aquí llamado cnetworkingfake , este script le proporcionará su nombre de usuario y su contraseña:

 #!/bin/bash while read line do echo "$line" done < "/dev/stdin" echo username=mahuser echo password=MahSecret12345 

hacerlo ejecutable:

 chmod u+x /home/mahuser/bin/cnetworkingfake 

luego configúralo en git:

 git config --global cnetworkingential.helper /home/mahuser/bin/cnetworkingfake 

(o úsela sin –global para el único informe)

y – voilá – git usará este usuario + contraseña.

La documentation del compositor menciona que puedes evitar que use la API de GitHub, para que actúe como git clone :

Si configura la key no-api como true en un repository de GitHub, clonará el repository como lo haría con cualquier otro repository de Git en lugar de usar la API de GitHub. Pero a diferencia del uso del controller git directamente, el compositor intentará utilizar los files zip de GitHub.

Entonces la sección se vería así:

 "repositories": [ { "type": "vcs", "no-api": true, "url": "https://github.com/your/repo" } ], 

Tenga en count que la API está ahí por una razón. Por lo tanto, este debería ser un método de último recurso con respecto a la mayor carga en github.com.

También edita el file bashrc y agrega una secuencia de commands en él. Esto le solicitaría su contraseña cuando inicie git una vez y luego la recuerde hasta que finalice la session.

 SSH_ENV=$HOME/.ssh/environment # start the ssh-agent function start_agent {    echo "Initializing new SSH agent..."    # spawn ssh-agent    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"    echo succeeded    chmod 600 "${SSH_ENV}"    . "${SSH_ENV}" > /dev/null    /usr/bin/ssh-add } if [ -f "${SSH_ENV}" ]; then    . "${SSH_ENV}" > /dev/null  ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {      start_agent;  } else    start_agent; fi