¿Hay alguna manera de almacenar en caché las credenciales de GitHub para enviar commits?

1867

Recientemente cambié a sincronizar mis repositorios a https: // en GitHub (debido a problemas con el firewall), y siempre me pide una contraseña.

¿Hay alguna forma de almacenar en caché las credenciales, en lugar de autenticar cada vez que eso git push?

Zepplock
fuente
1
Ver también superuser.com/questions/199507/…
Coronel Panic el
2
Ahora puede usar un asistente de credenciales para cifrar el _netrcarchivo que contiene sus credenciales. Vea mi respuesta a continuación . Me pareció más seguro que el git-credential-winstore.exe(caché de memoria), que es un poco defectuoso en Windows.
VonC
git-credential-winstorefuncionó mejor para Windows. ¿Qué es un buggy? Configurar ssh es la opción preferida, aunque lo he hecho varias veces, es mucho más propenso a errores y, a veces, simplemente no funciona cuando tienes que conectarte a varios hosts.
Bron Davies
2
Por "certificado SSH", supongo que se refiere a "clave privada SSH".
Michael Mior

Respuestas:

2369

Con Git versión 1.7.9 y posterior

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

git config --global credential.helper cache

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

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

(Ese ejemplo se sugirió en la página de ayuda de GitHub para Linux ). También puede almacenar sus credenciales de forma permanente 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 usaste Homebrew para instalar Git, puedes usar el almacén de claves nativo de Mac OS X 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, puede usargnome-keyring (u otra implementación de llavero como KWallet).

Con versiones de Git anteriores a 1.7.9

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

https://you:[email protected]/you/example.git

... en otras palabras con :passworddespués del nombre de usuario y antes de @.

Puede configurar una nueva URL para su origincontrol remoto con:

git config remote.origin.url https://you:[email protected]/you/example.git

Asegúrese de usar https, y debe tener en cuenta que si hace esto, su contraseña de GitHub se almacenará en texto sin formato en su .gitdirectorio, lo que obviamente no es deseable.

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 ~/.netrcarchivo, aunque, como mantener 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 adoptar 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 <username>y <password>con su nombre de usuario y contraseña. También recuerde establecer permisos de sistema de archivos restrictivos en ese archivo:

chmod 600 ~/.netrc

Tenga en cuenta que en Windows, se debe llamar a este archivo _netrcy es posible que deba definir la variable de entorno% HOME%. Para obtener más detalles, consulte:

Mark Longair
fuente
72
No almacene su contraseña en texto sin formato. A partir de Git 1.7.9 puede usar ayudantes de credenciales. git config --global credential.helper osxkeychainen OS X. Para otros sistemas operativos, consulte help.github.com/articles/set-up-git
dazonic el
66
FWIW, el material del llavero osx es parte del código fuente GIT base, no es un componente exclusivo de Brew o MacPorts o lo que sea el sabor del mes. Y ni siquiera necesita crear git desde cero, solo cd contrib / credential / osxkeychain / y ejecutar make.
sintetizadorpatel
2
Con la autenticación de dos factores, debe usar lo que github llama un token de acceso de persona . De hecho, siempre debe usar una, ya que a diferencia de una contraseña, puede controlar qué acceso le da. Simplemente reemplace la contraseña en la URL para que termine con https://username:[email protected]/username/project.git. Hace que las contraseñas de texto sin formato almacenadas en el disco sean lo suficientemente seguras para usar.
Russell Stuart
12
git config --global credential.helper cacheno funciona en Windows: stackoverflow.com/questions/11693074/… usa gitcredentialstore en Windows y sé feliz
Sebastian J.
8
¿Alguna forma de establecer este tiempo de espera al infinito?
sudo
720

También puede hacer que Git almacene sus credenciales de forma permanente utilizando lo siguiente:

git config credential.helper store

Nota: Si bien esto es conveniente, Git almacenará sus credenciales en texto sin cifrar en un archivo local (.git-credentials) en el directorio de su proyecto (consulte a continuación el directorio "home"). Si no le gusta esto, elimine este archivo y cambie a usar la opción de caché.

Si desea que Git continúe pidiéndole credenciales cada vez que necesite conectarse al repositorio remoto, puede ejecutar este comando:

git config --unset credential.helper

Para almacenar las contraseñas en .git-credentialssu %HOME%directorio en lugar del directorio del proyecto: use la --globalbandera

git config --global credential.helper store
Giri Alwar
fuente
77
En Windows, puede descargar una utilidad auxiliar que configura las cosas para almacenar una versión cifrada de su contraseña GIT en la Tienda de Windows Creditial, consulte confluence.atlassian.com/display/STASH/…
Contango el
76
Descubrí que tenía que especificar --global o intentaría almacenar la configuración en el repositorio actual:git config --global credential.helper store
Brian Gordon
66
¿Por qué haría el caché en lugar de almacenarlo permanentemente? ¿Compartir computadoras o algo así?
Michael J. Calkins
2
@BrianGordon Estoy usando GIT 1.9.5 en Windows, y la marca --globalera redundante. Incluso sin este indicador, el archivo de credenciales se creó en el %USER_HOME%directorio.
jFrenetic
2
si no se almacena en texto plano, ¿con qué está protegido? ¿Tu contraseña? ¿No tendría que pedirte tu contraseña de administrador cuando te conectes a git? ¿No es extraño tener que ingresar una contraseña para obtener otra contraseña?
Cruncher
101

TLDR; Use un archivo netrc cifrado con Git 1.8.3+ .

Guardar una contraseña para una URL HTTPS del repositorio Git es posible con ~/.netrc(Unix) o %HOME%/_netrc(tenga en cuenta _) 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 descifre cada vez que necesite una contraseña (parapush / pull/ fetch/ cloneoperación).


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

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

git-credential-netrc: aceptar gpgopción

git-credential-netrcfue codificado para descifrar con ' gpg' independientemente 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.exeen su distribución, pero el uso de una instalación completa de GPG incluye un gpg-agent.exe, que memorizará su frase de contraseña asociada a su clave GPG).

  • Instale gpg4Win Lite, la interfaz mínima de línea de comando gnupg (tome la más recientegpg4win-vanilla-2.X.Y-betaZZ.exe ), y complete su RUTA con el directorio de instalación GPG:

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

(Tenga en cuenta el copycomando ' ': Git necesitará un script Bash para ejecutar el comando ' gpg'. Como gpg4win-vanilla-2viene con él gpg2.exe, debe duplicarlo).

  • Cree o importe una clave GPG y confíe en ella:

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

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

  • Confía en esa llave

  • Instale el script auxiliar de credenciales 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.perl

(Cuidado: el script se renombra en Git 2.25.x / 2.26, ver más abajo)

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

  • Hacer 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 olvide la parte ' protocol': ' http' o ' https' dependiendo de la URL que usará).

  • Cifre ese archivo:

    gpg -e -r a_recipient _netrc

(Ahora puede eliminar el _netrcarchivo, manteniendo solo el _netrc.gpgcifrado).

  • Use ese archivo encriptado:

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

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

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

De esa manera, puede memorizar varias URL / inicios de sesión / contraseñas en un archivo y almacenarlo en su disco encriptado.
Me parece más conveniente que un "ayudante de caché", 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 almacene en la memoria caché.


Con Git 2.26 (Q1 2020), el asistente de credenciales de muestra para usar .netrcse ha actualizado para que funcione de inmediato. Ver parche / discusión .

Ver commit 6579d93 , commit 1c78c78 (20 dic 2019) por Denton Liu ( Denton-L) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 1fd27f8 , 25 dic 2019)

contrib/credential/netrc: hacer PERL_PATH configurable

Firmado por: Denton Liu

El camino shebang para el intérprete de Perl git-credential-netrcestaba codificado.
Sin embargo, algunos usuarios pueden tenerlo ubicado en una ubicación diferente y, por lo tanto, habrían tenido que editar manualmente el script.

Agregue un .perlprefijo al script para denotarlo como plantilla e ignore la versión generada.
Aumentar el Makefilefin de que se genera git-credential-netrca partir de git-credential-netrc.perl, al igual que otros scripts de Perl.

Las recetas de Makefile fueron robadas descaradamente contrib/mw-to-git/Makefile.

Y:

Con 2.26 (Q1 2020), el asistente de credenciales de muestra para usar .netrc se ha actualizado para que funcione de inmediato.

Ver commit 6579d93 , commit 1c78c78 (20 dic 2019) por Denton Liu ( Denton-L) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 1fd27f8 , 25 dic 2019)

contrib/credential/netrc: trabajar fuera de un repositorio

Firmado por: Denton Liu

Actualmente, git-credential-netrcno funciona fuera de un repositorio git. Falla con el siguiente error:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

Sin embargo, no hay una razón real por la que deba estar dentro de un repositorio. Los ayudantes de credenciales también deberían poder funcionar bien fuera del repositorio.

Llame a la versión no propia de config()para que git-credential-netrcya no sea necesario ejecutarla en un repositorio.

Jeff King ( peff) agrega:

Supongo que está usando un cifrado con gpg netrc(si no, probablemente debería usarlo credential-store).
Para el acceso de contraseña de "solo lectura", encuentro que la combinación de passcon config como esta es un poco mejor:

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"
VonC
fuente
1
intentando lo mismo en Linux ... git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ... y obtengo "git: 'credential-netrc' no es un comando git. ver 'git --help' "
soleado
44
@sunny Eso es para lo que curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrcsirve: debe copiar el git-credential-netrcarchivo en cualquier lugar de su ruta ($PATH ), para que git pueda llamar ' credential-netrc'.
VonC
Bueno, _netrcno funcionó para mí en una Windows 7PC, pero .netrcfuncionó para youtube-dl con el --netrcargumento pasado.
Iulian Onofrei
@VonC la URL actual parece ser https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(entrando siete años después 😉)
Gwyneth Llewelyn
1
@GwynethLlewelyn Gracias. He editado la respuesta en consecuencia. No dude en editarlo usted mismo si ve otra información obsoleta.
VonC
43

Hay una manera fácil y anticuada de almacenar credenciales de usuario en una URL HTTPS:

https://user:[email protected]/...

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://[email protected]/...) que al menos le ahorrará la mitad de la molestia.

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

Wortwart
fuente
2
Es posible que sea necesario codificar el nombre de usuario / contraseña, consulte stackoverflow.com/a/34611311/3906760
MrTux el
43

Use una tienda de credenciales.

Para Git 2.11+ en OS X y Linux , use el almacén de credenciales integrado 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
roo2
fuente
2
Estoy seguro de que este es el camino a seguir, pero me da un error tristemente:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb
1
Gracias, pero obtengo el mismo error de alguna manera. ¿Estoy haciendo algo mal? Escribo el comando y no pasa nada. Tan pronto como presiono, me piden las credenciales, que inserto con éxito, pero recibo el error de que no es un comando git después de hacer eso.
codepleb
2
Antes de que libsecret funcione en Linux, debe seguir estos pasos: stackoverflow.com/a/40312117/775800
Lavamantis
1
Otra cosa: si tiene 2FA habilitado en Github, su contraseña no funcionará. Pero puede crear un token de acceso personal en su página de "Configuración" de Github y ese token funciona como su contraseña. github.com/github/hub/issues/822
Lavamantis
3
Problema de seguridad: el administrador de credenciales de Windows hace que su contraseña de texto sin formato sea accesible para cualquiera que haya iniciado sesión en su cuenta de Windows. Todo lo que necesitan hacer es enviar una solicitud al administrador de credenciales como printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( más detalles aquí ). Siempre debe usar un token de acceso personal con esto y, por supuesto, usar 2FA en su cuenta de GitHub.
cjs
40

Puedes usar

git config credential.helper store

Cuando ingrese la contraseña la próxima vez con extracción o inserción, se almacenará en el archivo .git-credentials como texto sin formato (un poco inseguro, pero solo colóquelo en una carpeta protegida).

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

git-credential-store

sgoran
fuente
3
Para Git para Windows 2.7.3 (marzo de 2016): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , eso sería en su git config credential.helper managerlugar
VonC
23

¡No fue obvio para mí que primero necesitaba descargar el ayudante! Encontré la descarga credential.helper en la autenticación permanente de Atlassian con repositorios Git .

Citar:

Siga estos pasos si desea usar Git con almacenamiento en caché de credenciales en OS X:

Descargue el binario git-credential-osxkeychain.

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

chmod a+x git-credential-osxkeychain

Ponlo en el directorio /usr/local/bin.

Ejecute el comando a continuación:

git config --global credential.helper osxkeychain
Ben
fuente
23

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

git remote rm origin
git remote add origin https://username:[email protected]/path/to/repo.git

Nota: No recomiendo este método, pero si tiene prisa y nada más funciona, puede usar este método.

Tarun Gupta
fuente
12
funcionará, tienes que escapar @ con% 40 en tu identificación de correo electrónico
Tarun Gupta
¿Qué pasa si tenemos un '+' en la identificación del correo electrónico? Intenté el mismo escape, pero el impulso decía 'no se encontró el repositorio'
killjoy
44
tiene% 2B en lugar de +
Tarun Gupta
Almacenar la contraseña en texto sin formato y de fácil acceso puede no ser la solución óptima.
reducción de la actividad
20

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

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

Puede depender de qué bibliotecas de red esté usando Git para el transporte HTTPS .

holaPiers
fuente
44
Asegúrate de hacerlo también chmod 0600 ~/.netrc.
Poolie
Solo quiero dejar un enlace aquí a la página de manual de Ubuntu netrc . Necesitaba crearlo para otro usuario (/home/git/.netrc) y luego cambiarle la propiedad a ese usuario.
zacharydl
17

Para Windows, puede usar el Administrador de credenciales de Git complemento (GCM). Actualmente es mantenido por Microsoft. Lo bueno es que guarda la contraseña en Windows Credential Store, no como texto sin formato.

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

Para los usuarios de Cygwin (o usuarios que ya usan el Git oficial para Windows), puede preferir la instalación manual. Descargue el paquete zip de la página de lanzamientos . Extraiga el paquete y luego ejecute el install.cmdarchivo. Esto se instalará en su ~/bincarpeta. (Asegúrese de que su ~/bindirectorio esté en su RUTA). Luego configúrelo con este comando:

git config --global credential.helper manager

Luego, Git ejecutará el git-credential-manager.exeal autenticar a cualquier servidor.

Nadeem Khedr
fuente
3
Cualquiera que haya iniciado sesión en su cuenta tiene fácil acceso al texto sin formato de la contraseña. Todo lo que necesitan hacer es enviar una solicitud al administrador de credenciales como printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( más detalles aquí ). Siempre debe usar un token de acceso personal con esto y, por supuesto, usar 2FA en su cuenta de GitHub.
cjs
13

Si no desea almacenar su contraseña en texto sin formato, como dijo Mark, puede usar una URL de GitHub diferente para buscar que para presionar. En su archivo de configuración, debajo de [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git

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

MatrixFrog
fuente
12

OAuth

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

git remote add fork https://[email protected]/foo/bar
git push fork

.netrc

Otro método es configurar su usuario / contraseña en ~/.netrc( _netrcen Windows), p. Ej.

machine github.com
login USERNAME
password PASSWORD

Para HTTPS, agregue la línea adicional:

protocol https

Un ayudante de credencial

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

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperes obligatorio),
  • Ventanas: git config --global credential.helper wincred
  • Linux y otros: git config --global credential.helper cache

Relacionado:

kenorb
fuente
10

Puede usar ayudantes de credenciales.

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

donde xes el número de segundos

Charan
fuente
77
Es el número de segundos ... Algunos genios lo actualizaron en milisegundos y todos lo aprobaron sin verificarlo. Por favor, no engañe a las personas si no sabe la respuesta. ¡Gracias!
Charan
Se puede dar un enlace a un lugar donde store, cachey otras cosas comunes se enumeran y explican?
Notinlist
3
¿Le importa mencionar el hecho de que esto es una mierda a menos que llame a otro comando específico para usar el 'caché' como administrador primero? Estas cosas son tan crípticas, todas estas respuestas están incompletas y ninguna de ellas funciona. Increíblemente frustrante. Vea esto en su lugar: stackoverflow.com/a/24800870/88409
Triynko
10

Después de clonar el repositorio repo, puede editar repo/.git/configy agregar algunas configuraciones como a continuación:

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

Entonces no se te pedirá usernamey passwordotra vez.

Xiaorong Liao
fuente
Funciona para mí con helper = manager(pero me piden nombre de usuario + repositorio para el primer impulso).
Stéphane Laurent
with helper = manager Recibo un error credential-manager no es un comando git
Kapil
Desafortunadamente, git ignora la contraseña en el archivo de configuración. .git_credentials con credential.store es la única opción.
Avamander
9

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 ayudante ficticio:

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

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

hazlo ejecutable:

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

luego configúralo en git:

git config --global credential.helper /home/mahuser/bin/credfake

(o úselo sin --global solo para el único repositorio)

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

bebbo
fuente
Estoy de acuerdo. Solución simple (si no segura) de hecho. +1, siempre y cuando sepas lo que estás haciendo.
VonC
7

Se debe usar un token de autenticación en lugar de la contraseña de la cuenta. Vaya a la configuración / 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 cuenta para el trabajo del proyecto. Solo use la contraseña cuando realice tareas de administración, como crear tokens nuevos o revocar tokens viejos.


En lugar de un token o contraseña que otorgue a un usuario acceso completo a una cuenta de GitHub, se puede usar una clave de implementación específica del proyecto para otorgar acceso a un único repositorio de proyectos. Un proyecto Git se puede configurar para usar esta clave diferente en los siguientes pasos cuando aún puede acceder a otras cuentas o proyectos Git con su credencial normal:

  1. Escriba un archivo de configuración SSH que contenga Host, IdentityFilepara la clave de implementación, quizás el UserKnownHostsFiley quizás elUser (aunque creo que no lo necesita).
  2. Escriba un script de shell de envoltura SSH que prácticamente sea ssh -F /path/to/your/config $*
  3. Anteponga GIT_SSH=/path/to/your/wrapperdelante de su comando Git normal. Aquí el git remote(origen) debe usar el [email protected]:user/project.gitformato.
minghua
fuente
7

Es mejor usar credenciales para la seguridad, pero puede mantenerlo durante algún tiempo usando el caché:

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

Sus credenciales se guardarán durante 3600 segundos.

Sarvar Nishonboev
fuente
¿Significa que después de 3600 segundos, tenemos que ingresar la contraseña nuevamente? ¿Cómo salvarlos permanentemente?
HoangVu
$ git config credential.helper 'cache --timeout = 3600' error: no se pudo bloquear el archivo de configuración .git / config: No existe tal archivo o directorio
PlantationGator
Esto funcionó: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator
@Tama Sé que han pasado tres años, pero puedes dejarlo --timeouty las credenciales se almacenarán para siempre.
Neil Chowdhury
¿Funcionará esto dentro de un contenedor Docker (basado en windowsservercore)?
Peter Mortensen
5

Las cosas son un poco diferentes si está utilizando autenticación de dos factores como yo. Como no encontré una buena respuesta en otro lugar, pegaré una aquí para que pueda encontrarla más tarde.

Si está utilizando la autenticación de dos factores, especificar el nombre de usuario / contraseña ni siquiera funcionará: se le negará el acceso. Pero puede usar un token de acceso a la aplicación y usar el asistente de credenciales de Git para almacenarlo en caché. Aquí están los enlaces pertinentes:

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

JnBrymn
fuente
cuando utiliza la autenticación de 2 vías, utiliza el "token de acceso" como contraseña. el nombre de usuario permanece igual que siempre
Ben Yitzhaki
4

Esto funciona para mí, estoy usando Windows 10

git config --global credential.helper wincred
Mostafa Nawara
fuente
4

Por lo general, tiene una URL remota, algo como esto,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Si desea omitir el nombre de usuario y la contraseña mientras lo usa git push, intente esto:

 git remote set-url origin https://username:[email protected]/username/Repo.git

Acabo de agregar la misma URL (con los detalles del usuario, incluida la contraseña) al origen.

NOTA: No funciona si el nombre de usuario es un ID de correo electrónico.

git remote -v

origin    https://username:[email protected]/username/Repo.git (fetch)
origin    https://username:[email protected]/username/Repo.git (push)
Nayagam
fuente
3

Obtuve mi respuesta de gitcredentials (7) Manual Page . Para mi caso, no tengo credential-cache en mi instalación de Windows; Yo uso credencial-tienda.

Después de usar credential-store, el nombre de usuario / contraseña se almacenan en el archivo [carpeta de usuario] / .git-credentials. Para eliminar el nombre de usuario / contraseña, simplemente elimine el contenido del archivo.

Mike Lin
fuente
2
Cuando no tenga credencial-caché en sus ventanas, le sugiero que use git config --global credential.helper wincredesta tienda para guardar la contraseña permanentemente.
Chetabahana
2

La documentación del compositor menciona que puede evitar que use la API de GitHub, para que actúe como git clone:

Si configura la no-apiclave trueen un repositorio de GitHub, clonará el repositorio como lo haría con cualquier otro repositorio de Git en lugar de utilizar la API de GitHub. Pero a diferencia de usar el gitcontrolador directamente, el compositor seguirá intentando usar los archivos 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 cuenta que la API está ahí por una razón. Por lo tanto, este debería ser un método de último recurso con respecto al aumento de carga en github.com.

sebastianwagner
fuente
No estoy seguro de qué tiene que ver esta respuesta con la pregunta original.
Charles Oppermann
2

También edita el archivo bashrc y agrega un script en él.

Esto le pedirá su contraseña una vez cuando inicie Git y luego la recordará hasta que cierre la sesión.

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
ThePatelGuy
fuente
0

Si estas usando osxkeychain y ha caducado un token y desea actualizarlo, siga estos pasos:

Ejecute en la terminal, luego presione enter dos veces.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Ahora se le pedirá un nombre de usuario / contraseña. Sin embargo, a veces parece que esto no 'toma' y hay que seguir volviendo a entrar.

Si es así, reinicie su computadora . Ahora, la próxima vez que ejecute un comando git e ingrese su nombre de usuario / contraseña, se guardará.

Andrew Schreiber
fuente