¿Cómo guardar el nombre de usuario y la contraseña en git [GitExtension]?

1243

Quiero usar un push and pull automáticamente en GitExtension , sin ingresar mi usuario y contraseña en un aviso, siempre.

Entonces, ¿cómo puedo guardar mis credenciales en git?

Edson Cezar
fuente
1
También puede autenticarse a través de SSH: stackoverflow.com/questions/6565357/…
Anton Tarasenko
1
@AntonTarasenko my gitconfig no dice nada sobre Proxy, solo [usuario] email = [email protected] name = uname [credencial] helper = store
gc7__

Respuestas:

2214

correr

git config --global credential.helper store

entonces

git pull

proporcione un nombre de usuario y contraseña y esos detalles se recordarán más tarde. Las credenciales se almacenan en un archivo en el disco, con los permisos de disco de "solo lectura / escritura por el usuario" pero aún en texto sin formato.

Si quieres cambiar la contraseña más tarde

git pull

Fallará, porque la contraseña es incorrecta, git elimina el usuario ofensivo + contraseña del ~/.git-credentialsarchivo, por lo que ahora vuelva a ejecutar

git pull

para proporcionar una nueva contraseña para que funcione como antes.

Neetika
fuente
66
¿Cómo es importante la bandera -u para cambiar la contraseña más tarde?
lucidbrot
8
para Debian / Ubuntu use libsecret stackoverflow.com/questions/36585496/…
rofrol el
3
@lucidbrot lo siento por responder tarde. git pull -u no funciona con la última versión. He actualizado la respuesta. Espero que responda tu pregunta.
Neetika
51
Tenga en cuenta que esto almacenará su nombre de usuario y contraseña en un archivo de texto sin formato en ~ / .git-credentials. Cualquiera puede abrirlo y leerlo.
RoboAlex
12
Esto no funciona No logra tirar.
Urasquirrel
350

Puede usar el git configpara habilitar el almacenamiento de credenciales en git.

git config --global credential.helper store

Cuando ejecute este comando, la primera vez que extraiga o presione desde el repositorio remoto, se le preguntará sobre el nombre de usuario y la contraseña.

Posteriormente, para las comunicaciones consiguientes con el repositorio remoto, no tiene que proporcionar el nombre de usuario y la contraseña.

El formato de almacenamiento es un .git-credentialsarchivo, almacenado en texto sin formato.

Además, puede usar otros ayudantes para git config credential.helper, a saber, memoria caché:

git config credential.helper cache <timeout>

que toma una opción timeout parameter, determinando por cuánto tiempo las credenciales se guardarán en la memoria Con el ayudante, las credenciales nunca tocarán el disco y se borrarán después del tiempo de espera especificado. El defaultvalor es900 seconds (15 minutes).


ADVERTENCIA : Si usa este método, las contraseñas de su cuenta git se guardarán en plaintextformato, en el global .gitconfig file, por ejemplo, en Linux será/home/[username]/.gitconfig

Si esto no es deseable para usted, use un ssh keypara sus cuentas en su lugar.

Farhad Faghihi
fuente
3
Desearía que mostraras el archivo .gitconfig: el primer comando ha sido sobrescrito por el segundo :(
Adam
3
Para git config credential.helper cachelas contraseñas no se pueden guardar en un archivo, sólo se almacena en la memoria. Ver: git-scm.com/docs/git-credential-cache
SA
1
No funciona. Da fatal: la autenticación falló. Ni siquiera pide contraseña.
Philip Rego
2
Al igual que un apéndice: su clave ssh privada también se almacenará en texto sin formato en una ubicación accesible para el usuario, por lo que, en esencia, la misma superficie de ataque en ambos casos.
Falco
¿cómo puedo usar esto para gitlab
Anil
171

Método recomendado y seguro: SSH

Crea una clave ssh Github. Vaya a github.com -> Configuración -> claves SSH y GPG -> Nueva clave SSH. Ahora guarde su clave privada en su computadora.

Luego, si la clave privada se guarda como id_rsa en el directorio ~ / .ssh / , la agregamos para la autenticación como tal:

ssh-add -K ~/.ssh/id_rsa


Un método más seguro: almacenamiento en caché

Podemos usar git-credential-store para almacenar en caché nuestro nombre de usuario y contraseña por un período de tiempo. Simplemente ingrese lo siguiente en su CLI (terminal o símbolo del sistema):

git config --global credential.helper cache

También puede establecer el período de tiempo de espera (en segundos) como tal:

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


Un método aún menos seguro

Git-credential-store también se puede usar, pero guarda las contraseñas en un archivo de texto plano en su disco como tal:

git config credential.helper store


Respuesta desactualizada: rápida e insegura

Este es un método inseguro para almacenar su contraseña en texto sin formato. Si alguien obtiene el control de su computadora, su contraseña se verá expuesta.

Puede configurar su nombre de usuario y contraseña de esta manera:

git config --global user.name "your username"

git config --global user.password "your password"
Andreas Bigger
fuente
16
Esto no funcionó para mí, git clone todavía pide el nombre de usuario y la contraseña
Oliver
11
no recomiendo almacenar su contraseña de esta manera porque "git config --global -l" revelaría su contraseña en la consola
CCC
1
Esto no está funcionando para mí. Es extraño que funcione para cualquiera, ya que en la especificación de gitconfig no hay espacio para la "contraseña"
Hamish Todd
.gitconfig es el archivo diferente: .git-credentials ubicado en su carpeta de inicio contiene URL para repo con su nombre de usuario y contraseña en URL, al igual que git: // nombre de usuario: contraseña @ servidor / git / repo Tenga cuidado, se guarda llano CONTRASEÑA DE TEXTO. Use "git config --global credential.helper cache" si no puede usar las claves ssh.
skabbit
Cuando intenté agregar usuario y contraseña manualmente, el archivo de configuración se rompió y tuve que clonar el repositorio nuevamente. No intentes esto ..
Letie Techera
102

Active el asistente de credenciales para que Git guarde su contraseña en la memoria durante algún tiempo:

En Terminal, ingrese lo siguiente:

# Set git to use the credential memory cache
git config --global credential.helper cache

De forma predeterminada, Git almacenará en caché su contraseña durante 15 minutos.

Para cambiar el tiempo de espera predeterminado de la caché de contraseña, ingrese lo siguiente:

# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'

De la Ayuda de GitHub

simhumileco
fuente
77
eres el único que sugirió la versión global que es IMPORTANTE, porque me arruinó cada vez que volví a clonar el repositorio
Xerus
44
¿Cómo configurar el tiempo de espera al infinito? Nunca quiero volver a ingresar mi contraseña.
Avamander
8
@Avamander solo reemplaza la cacheparte con store. Por lo tanto, el comando completo será: git config --global credential.helper store. Tenga en cuenta que esto almacenará su contraseña en un archivo de texto abierto (sin cifrado, por así decirlo).
Aleksandar
2
@Casper Eso no funciona con más de una cuenta, la contraseña no se obtiene de la tienda en función del correo electrónico como debería, sino que se toma la primera de la lista.
Avamander
2
@Avamander hm ... ¿se supone que es así o podría ser un error? ¿Cuál es el valor máximo para el --timeoutparámetro?
Aleksandar
50

Puede editar el ~/.gitconfigarchivo para almacenar sus credenciales

sudo nano ~/.gitconfig

Que ya debería tener

[user]
        email = [email protected]
        user = gitUSER

Debe agregar al final de este archivo.

[credential]
        helper = store

La razón por la que recomiendo esta opción es porque es global y si en algún momento necesita eliminar la opción, sabe a dónde ir y cambiarla.

SÓLO USE ESTA OPCIÓN EN SU COMPUTADORA PERSONAL.

Entonces cuando tiras | clon | ingrese su contraseña de git, en general, la contraseña se guardará ~/.git-credentialsen el formato

https://GITUSER:[email protected]

DONDE DOMINIO.XXX PODRÍA ESTAR GITHUB.COM | BITBUCKET.ORG | OTRO

Ver documentos

Reinicia tu terminal.

T04435
fuente
1
No olvides reiniciar git bash window. Solo cuando hice eso, funcionó para mí.
sofs1
33

Simplemente ponga sus credenciales en la URL de esta manera:

https://Username: Password@github.com/myRepoDir/myRepo.git

Puede almacenarlo así:

git remote add myrepo https://Userna...

... ejemplo para usarlo :

git push myrepo master


Ahora eso es para enumerar los alias de url:

git remote -v

... y que el comando para eliminar uno de ellos:

git remote rm myrepo

Nadu
fuente
8
También puede dejar su contraseña fuera de la URL para que Git le pida su contraseña, pero no su nombre de usuario.
canguro
Es mucho más fácil y seguro usar SSH en lugar de HTTP. Por lo tanto, puede mantener su contraseña de Git en secreto y solo usar su clave SSH. Información sobre SSH en Git: help.github.com/en/enterprise/2.16/user/… [email protected]:Username/myRepo.git
Loïch
Tener su contraseña en la URL la guardará en el historial de su terminal, por lo que de esta manera no es muy segura.
Josh Correia
Tenga en cuenta que actualmente un Wiki solo se puede clonar https, no ssh, por lo que una solución como esta puede ser útil allí. Tenga en cuenta también que puede usar un token oauth, que es marginalmente más seguro que su contraseña de GitHub.
AstroFloyd
31

Para la configuración global, abra el terminal (desde cualquier lugar) ejecute lo siguiente:

  git config --global user.name "your username"
  git config --global user.password "your password"

Por eso, cualquier repositorio de git local que tenga en su máquina usará esa información.

Puede configurar individualmente para cada repositorio haciendo:

  • Abra la terminal en la carpeta del repositorio.
  • ejecuta lo siguiente:

    git config user.name "your username"
    git config user.password "your password"
    

Afecta solo a esa carpeta (porque su configuración es local).

Tuananhcwrs
fuente
8
¿No es peligroso tener tales credenciales en un simple archivo de configuración visible para cualquiera?
bool3max
1
Su pregunta debe ser para otro tema. Aquí discutimos sobre cómo configurar el nombre y la contraseña para git global y localmente.
Tuananhcwrs
Gracias por el aporte amigo
bool3max
11
Solo me gustaría agregar que preguntar sobre posibles problemas de seguridad de una respuesta tiene su lugar aquí, ya que influye directamente en su calidad y potencialmente en miles de usuarios que la implementan.
Michael Kargl
2
no funciona para mí, agregué la --localetiqueta pero nuevamente no pasa nada
PayamBeirami
23

Puede usar git-credential-store para almacenar sus contraseñas sin cifrar en el disco, protegidas solo por los permisos del sistema de archivos.

Ejemplo

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]

Puede verificar las credenciales almacenadas en el archivo ~/.git-credentials

Para obtener más información, visite git-credential-store - Ayudante para almacenar credenciales en el disco

David Navarro Astudillo
fuente
17

Estará más seguro si usa la autenticación SSH que la autenticación de nombre de usuario / contraseña.

Si está utilizando una Mac, la autenticación de cliente SSH está integrada en el llavero de MacOS. Una vez que haya creado una clave SSH, escriba en su terminal:

ssh-add -K ~/.ssh/id_rsa

Esto agregará la clave privada SSH al llavero MacOS. El cliente git usará ssh cuando se conecte al servidor remoto. Mientras haya registrado su clave pública ssh con el servidor, estará bien.

Birol Efe
fuente
1
debería ser k no K?
dez93_2000
1
FYI: Estoy trabajando en una Mac. Dicho esto, de la información "man": "-k" Al cargar claves en el agente o eliminarlas del agente, procese solo claves privadas simples y omita los certificados. "-K" Al agregar identidades, cada frase de contraseña también se almacenará en el llavero del usuario. Al eliminar identidades con -d, se eliminará cada frase de contraseña.
Birol Efe
3
No creo que esto funcione para repositorios basados ​​en https.
zakmck
55
Esta respuesta parece confundir las contraseñas (repositorios HTTPS) con las claves privadas SSH.
Steve Bennett
2
Estoy en desacuerdo. No puede estar más seguro si le da acceso al host SSH. Al usar la autenticación HTTP, alguien que robe las credenciales solo tendrá acceso a ellas GitHub/GitLab. También los tokens están diseñados para tener una vida limitada.
Dimitri Kopriwa
16

Después de revisar docenas de publicaciones SO, blogs, etc., probé todos los métodos, y esto es lo que se me ocurrió. Cubre TODO.

La hoja de referencia de credenciales y paquetes privados de Vanilla DevOps Git

Estas son todas las formas y herramientas mediante las cuales puede autenticar de forma segura git para clonar un repositorio sin una solicitud de contraseña interactiva .

  • SSH Public Keys
    • SSH_ASKPASS
  • Tokens de acceso API
    • GIT_ASKPASS
    • .gitconfig en su lugar
    • .gitconfig [credencial]
    • .git-credentials
    • .netrc
  • Paquetes privados (gratis)
    • nodo / npm package.json
    • python / pip / eggs require.txt
    • gemas de rubí Gemfile
    • golang go.mod

La bala de plata

¿Quieres Just Works ™? Esta es la bala mágica de plata.

Obtenga su token de acceso (consulte la sección en la hoja de referencia si necesita las instrucciones de Github o Gitea para eso) y configúrelo en una variable de entorno (tanto para el desarrollo local como para la implementación):

MY_GIT_TOKEN=xxxxxxxxxxxxxxxx

Para Github, copie y ejecute estas líneas textualmente :

git config --global url."https://api:[email protected]/".insteadOf "https://github.com/"
git config --global url."https://ssh:[email protected]/".insteadOf "ssh://[email protected]/"
git config --global url."https://git:[email protected]/".insteadOf "[email protected]:"

Enhorabuena, ahora cualquier repositorio git de clonación de herramientas automatizadas no se verá obstaculizado por una solicitud de contraseña, ya sea usando https o cualquier estilo de ssh url.

¿No estás usando Github?

Para otras plataformas (Gitea, Github, Bitbucket), simplemente cambie la URL. No cambie los nombres de usuario (aunque sean arbitrarios, son necesarios para distintas entradas de configuración).

Compatibilidad

Esto funciona localmente en MacOS, Linux, Windows (en Bash), Docker, CircleCI, Heroku, Akkeris, etc.

Más información

Vea la sección ".gitconfig en lugar de" de la hoja de trucos.

Seguridad

Vea la sección "Seguridad" de la hoja de trucos.

CoolAJ86
fuente
2
Este es un salvavidas. Gracias.
annaoomph
2
Lo que estaba buscando era git config --global credential."https://somegithost.com".username MyUserName, que está en tu hoja de trucos, pero no en ningún otro lugar en este hilo de respuestas. Esa solución en particular no responde la pregunta del OP, pero sí la mía, ¡así que gracias!
TheDudeAbides
1
Esto es maravilloso !!! La mejor respuesta, muchas gracias.
Parsa
12

En ese caso, necesita el asistente de credenciales git para decirle a git que recuerde su contraseña y nombre de usuario de GitHub mediante la siguiente línea de comando:

git config --global credential.helper wincred 

y si está utilizando repositorio utilizando la clave SSH, entonces necesita la clave SSH para autenticarse.

shaw
fuente
11

Ninguna de las respuestas anteriores funcionó para mí. Seguía recibiendo lo siguiente cada vez que quería fetcho pull:

Enter passphrase for key '/Users/myusername/.ssh/id_rsa':


Para Mac

Pude evitar que pidiera mi frase de contraseña:

  1. Abra la configuración ejecutando: vi ~/.ssh/config
  2. Agregó lo siguiente: UseKeychain yes
  3. Guardado y salir: presione Esc , luego ingrese:wq!

Para ventanas

Pude hacer que funcionara usando la información en este stackexchange: https://unix.stackexchange.com/a/12201/348665

Gene Parcellano
fuente
eso se debe a que está utilizando el protocolo SSH (otras respuestas usan HTTPS).
mariusm
6

Además de editar el ~/.gitconfigarchivo, eso puede hacer si pregunta:

git config --local --edit

o

git config --global --edit

Nota para usar siempre comillas simples :

git config --local user.name 'your username'
git config --local user.password 'your password'

o

git config --global user.name 'your username'
git config --global user.password 'your password'

Su nombre de usuario y contraseña pueden usar algunos caracteres que romperían su contraseña si usa comillas dobles.

--localo --globalsignifica que los parámetros de configuración se guardan para el proyecto o para el usuario del sistema operativo.

prosti
fuente
Consulte igualmente uno que explica aún más.
prosti
6

Solo usa

git config --global credential.helper store

y haga el git pull , pedirá nombre de usuario y contraseña, a partir de ahora no proporcionará ningún mensaje de nombre de usuario y contraseña, almacenará los detalles

Srikanth Josyula
fuente
44
Básicamente has repetido la respuesta aceptada .
jsamol
4

Almacene el nombre de usuario y la contraseña en .git-credentials

.git-credentialses donde se almacena su nombre de usuario y contraseña (token de acceso) cuando ejecuta git config --global credential.helper store, que es lo que sugieren otras respuestas, y luego escriba su nombre de usuario y contraseña o token de acceso:

https://${username_or_access_token}:${password_or_access_token}@github.com

Entonces, para guardar el nombre de usuario y la contraseña (token de acceso):

git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials

Esto es muy útil para el robot github, por ejemplo, para resolver las compilaciones automatizadas en cadena en el mismo repositorio de docker al tener reglas para diferentes ramas y luego activarlo presionando en post_pushhooker en el centro de docker.

Un ejemplo de esto se puede ver aquí en stackoverflow.

JiaHao Xu
fuente
Gracias, eres un salvavidas! También podemos configurar https: // $ {access_token}: $ {access_token} @ github.com
Lucas Mendes Mota Da Fonseca
1
El token de acceso @LucasMendesMotaDaFonseca se puede usar como nombre de usuario ???
JiaHao Xu
3

Una forma rápida de almacenar en caché las credenciales de git:

git config credential.helper 'cache' --timeout=10800

agradable y seguro

el tiempo de espera es en segundos.

Amin Shojaei
fuente
2

Después de leer el hilo completo y experimentar con la mayoría de las respuestas a esta pregunta, finalmente encontré el procedimiento que me funciona. Quiero compartirlo en caso de que alguien tenga que lidiar con un caso de uso complejo, pero todavía no quiero pasar por el hilo completo y las páginas de manual de gitcredentials , gitcredentials-store, etc., como lo hice yo.

Encuentre a continuación el procedimiento que le sugiero SI (como yo) tiene que lidiar con varios repositorios de varios proveedores (GitLab, GitHub, Bitbucket, etc.) utilizando varias combinaciones diferentes de nombre de usuario / contraseña. Si, en cambio, solo tiene una única cuenta con la que trabajar, es mejor que emplee las soluciones git config --global credential.helper storeo git config --global user.name "your username"etc. que se han explicado muy bien en las respuestas anteriores.

Mi solución:

  1. ayudante de credenciales globales sin configurar, en caso de que alguna experimentación anterior se interponga en el camino :)

> git config --global --unset credentials.helper

  1. vaya al directorio raíz de su repositorio y desactive el asistente de credenciales local (si es necesario)

> cd /path/to/my/repo

> git config --unset credential.helper

  1. cree un archivo para almacenar las credenciales de su repositorio en

> git config credential.helper 'store --file ~/.git_repo_credentials'

Nota : este comando crea un nuevo archivo llamado ".git_repo_credentials" en su directorio de inicio, en el que Git almacena sus credenciales. Si no especifica un nombre de archivo, Git usa los ".git_credentials" predeterminados. En este caso, simplemente emitirá el siguiente comando:

> git config credential.helper store

  1. establece tu nombre de usuario

git config credential.*.username my_user_name

Nota : usar "*" generalmente está bien si sus repositorios son del mismo proveedor (por ejemplo, GitLab). Si, en cambio, sus repositorios están alojados por diferentes proveedores, sugiero configurar explícitamente el enlace al proveedor para cada repositorio, como en el siguiente ejemplo (para GitLab):

git config credential.https://gitlab.com.username my_user_name

En este punto, si emite un comando que requiere sus credenciales (por ejemplo git pull), se le pedirá la contraseña correspondiente a "my_user_name". Esto solo se requiere una vez porque git almacena las credenciales en ".git_repo_credentials" y usa automáticamente los mismos datos en accesos posteriores.

Sal Borrelli
fuente
2

Del comentario de rifrol, en Linux Ubuntu, de esta respuesta , así es como en Ubuntu:

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Algunas otras distribuciones proporcionan el binario para que no tenga que construirlo.

En OS X, por lo general viene "integrado" con un módulo predeterminado de "osxkeychain" para que pueda obtenerlo de forma gratuita.

rogerdpack
fuente
2

Consulte la documentación oficial de git:

Si utiliza el transporte SSH para conectarse a controles remotos, es posible que tenga una clave sin una frase de contraseña, lo que le permite transferir datos de forma segura sin escribir su nombre de usuario y contraseña. Sin embargo, esto no es posible con los protocolos HTTP: cada conexión necesita un nombre de usuario y contraseña. Esto se vuelve aún más difícil para los sistemas con autenticación de dos factores, donde el token que usa para una contraseña se genera aleatoriamente y no se puede evitar.

Afortunadamente, Git tiene un sistema de credenciales que puede ayudar con esto. Git tiene algunas opciones proporcionadas en el cuadro:

  • El valor predeterminado es no almacenar en caché en absoluto. Cada conexión le pedirá su nombre de usuario y contraseña.

  • El modo "caché" mantiene las credenciales en la memoria durante un cierto período de tiempo. Ninguna de las contraseñas se almacena en el disco y se eliminan de la memoria caché después de 15 minutos.

  • El modo "almacenar" guarda las credenciales en un archivo de texto sin formato en el disco y nunca caducan. Esto significa que hasta que cambie su contraseña para el host Git, no tendrá que volver a escribir sus credenciales. La desventaja de este enfoque es que sus contraseñas se almacenan en texto sin formato en un archivo plano en su directorio de inicio.

  • Si está utilizando una Mac, Git viene con un modo de "osxkeychain", que almacena las credenciales en el llavero seguro que está conectado a su cuenta del sistema. Este método almacena las credenciales en el disco y nunca caducan, pero están encriptadas con el mismo sistema que almacena los certificados HTTPS y los rellenos automáticos de Safari.

  • Si está utilizando Windows, puede instalar un asistente llamado "Git Credential Manager para Windows". Esto es similar al ayudante "osxkeychain" descrito anteriormente, pero utiliza el Windows Credential Store para controlar la información confidencial. Se puede encontrar en https://github.com/Microsoft/Git-Credential-Manager-for-Windows .

Puede elegir uno de estos métodos estableciendo un valor de configuración de Git:

$ git config --global credential.helper cache

$ git config --global credential.helper store

https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

Sma Ma
fuente