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
?
git
authentication
github
git-push
git-config
Zepplock
fuente
fuente
_netrc
archivo que contiene sus credenciales. Vea mi respuesta a continuación . Me pareció más seguro que elgit-credential-winstore.exe
(caché de memoria), que es un poco defectuoso en Windows.git-credential-winstore
funcionó 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.Respuestas:
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:
... 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:
(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:
Para Windows, hay un ayudante llamado Git Credential Manager para Windows o wincred en msysgit .
Con Git para Windows 2.7.3+ (marzo de 2016):
Para Linux, puede usar
gnome-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
origin
usa su control remoto para incluir la contraseña de esta manera:... en otras palabras con
:password
después del nombre de usuario y antes de@
.Puede configurar una nueva URL para su
origin
control remoto con: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.git
directorio, 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
~/.netrc
archivo, 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
:... 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:Tenga en cuenta que en Windows, se debe llamar a este archivo
_netrc
y es posible que deba definir la variable de entorno% HOME%. Para obtener más detalles, consulte:fuente
git config --global credential.helper osxkeychain
en OS X. Para otros sistemas operativos, consulte help.github.com/articles/set-up-githttps://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.git config --global credential.helper cache
no funciona en Windows: stackoverflow.com/questions/11693074/… usa gitcredentialstore en Windows y sé felizTambién puede hacer que Git almacene sus credenciales de forma permanente utilizando lo siguiente:
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:
Para almacenar las contraseñas en
.git-credentials
su%HOME%
directorio en lugar del directorio del proyecto: use la--global
banderafuente
git config --global credential.helper store
--global
era redundante. Incluso sin este indicador, el archivo de credenciales se creó en el%USER_HOME%
directorio.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 (para
push
/pull
/fetch
/clone
operación).Nota: con Git 2.18 (Q2 2018), ahora puede personalizar el GPG utilizado para descifrar el
.netrc
archivo 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)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 ungpg-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:(Tenga en cuenta el
copy
comando ' ': Git necesitará un script Bash para ejecutar el comando 'gpg
'. Comogpg4win-vanilla-2
viene con élgpg2.exe
, debe duplicarlo).Cree o importe una clave GPG y confíe en ella:
(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%
:(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
(No olvide la parte '
protocol
': 'http
' o 'https
' dependiendo de la URL que usará).Cifre ese archivo:
(Ahora puede eliminar el
_netrc
archivo, manteniendo solo el_netrc.gpg
cifrado).Use ese archivo encriptado:
(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.gpg
archivo 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
.netrc
se 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)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)Jeff King (
peff
) agrega:fuente
curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc
sirve: debe copiar elgit-credential-netrc
archivo en cualquier lugar de su ruta ($PATH
), para que git pueda llamar 'credential-netrc
'._netrc
no funcionó para mí en unaWindows 7
PC, pero.netrc
funcionó para youtube-dl con el--netrc
argumento pasado.https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(entrando siete años después 😉)Hay una manera fácil y anticuada de almacenar credenciales de usuario en una URL HTTPS:
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.
fuente
Use una tienda de credenciales.
Para Git 2.11+ en OS X y Linux , use el almacén de credenciales integrado de Git :
Para msysgit 1.7.9+ en Windows :
Para Git 1.7.9+ en OS X use:
fuente
git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
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.Puedes usar
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
fuente
git config credential.helper manager
lugar¡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:
Ponlo en el directorio
/usr/local/bin
.Ejecute el comando a continuación:
fuente
Simplemente incluya las credenciales de inicio de sesión como parte de la URL:
Nota: No recomiendo este método, pero si tiene prisa y nada más funciona, puede usar este método.
fuente
En una configuración de GNU / Linux, un ~ / .netrc también funciona bastante bien:
Puede depender de qué bibliotecas de red esté usando Git para el transporte HTTPS .
fuente
chmod 0600 ~/.netrc
.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.cmd
archivo. Esto se instalará en su~/bin
carpeta. (Asegúrese de que su~/bin
directorio esté en su RUTA). Luego configúrelo con este comando:Luego, Git ejecutará el
git-credential-manager.exe
al autenticar a cualquier servidor.fuente
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.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"]
:Todavía solicitará una contraseña cuando presione, pero no cuando busque, al menos para proyectos de código abierto.
fuente
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:.netrc
Otro método es configurar su usuario / contraseña en
~/.netrc
(_netrc
en Windows), p. Ej.Para HTTPS, agregue la línea adicional:
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.
git config --global credential.helper osxkeychain
(osxkeychain helper
es obligatorio),git config --global credential.helper wincred
git config --global credential.helper cache
Relacionado:
fuente
Puede usar ayudantes de credenciales.
donde
x
es el número de segundosfuente
store
,cache
y otras cosas comunes se enumeran y explican?Después de clonar el repositorio
repo
, puede editarrepo/.git/config
y agregar algunas configuraciones como a continuación:Entonces no se te pedirá
username
ypassword
otra vez.fuente
helper = manager
(pero me piden nombre de usuario + repositorio para el primer impulso).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:
hazlo ejecutable:
luego configúralo en git:
(o úselo sin --global solo para el único repositorio)
y - voilá - git usará este usuario + contraseña.
fuente
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:
Host
,IdentityFile
para la clave de implementación, quizás elUserKnownHostsFile
y quizás elUser
(aunque creo que no lo necesita).ssh -F /path/to/your/config $*
GIT_SSH=/path/to/your/wrapper
delante de su comando Git normal. Aquí elgit remote
(origen) debe usar el[email protected]:user/project.git
formato.fuente
Es mejor usar credenciales para la seguridad, pero puede mantenerlo durante algún tiempo usando el caché:
Sus credenciales se guardarán durante 3600 segundos.
fuente
--timeout
y las credenciales se almacenarán para siempre.windowsservercore
)?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.
fuente
Esto funciona para mí, estoy usando Windows 10
fuente
Por lo general, tiene una URL remota, algo como esto,
Si desea omitir el nombre de usuario y la contraseña mientras lo usa
git push
, intente esto: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.
fuente
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.
fuente
git config --global credential.helper wincred
esta tienda para guardar la contraseña permanentemente.La documentación del compositor menciona que puede evitar que use la API de GitHub, para que actúe como
git clone
:Entonces la sección se vería así:
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.
fuente
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.
fuente
Si estas usando
osxkeychain
y ha caducado un token y desea actualizarlo, siga estos pasos:Ejecute en la terminal, luego presione enter dos veces.
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á.
fuente