authentication - recordar - Git push requiere nombre de usuario y contraseña
guardar credenciales git (19)
Autenticación permanente con repositorios Git,
Ejecute el siguiente comando para habilitar el almacenamiento en caché de credenciales :
$ git config credential.helper store
$ git push https://github.com/repo.git
Username for ''https://github.com'': <USERNAME>
Password for ''https://[email protected]'': <PASSWORD>
El uso también debe especificar caducidad de almacenamiento en caché ,
git config --global credential.helper ''cache --timeout 7200''
Después de habilitar el almacenamiento en caché de credenciales, se almacenará en caché durante 7200 segundos (2 horas) .
He clonado un repositorio de git desde mi cuenta de Github a mi PC.
Quiero trabajar tanto con mi PC como con mi computadora portátil, pero con una sola cuenta de Github.
Cuando intento presionar o desconectar de Github usando mi PC, se requiere un nombre de usuario y contraseña, ¡pero no cuando se usa la computadora portátil!
No quiero escribir mi nombre de usuario y contraseña cada vez que interactúo con el origen. ¿Qué me estoy perdiendo aquí?
Acabo de encontrar el mismo problema, y la solución más sencilla que encontré fue usar la URL de SSH en lugar de una de HTTPS:
ssh://[email protected]/username/repo.git
Y no esto:
https://github.com/username/repo.git
Ahora puede validar solo con la SSH Key
lugar del username
de username
y la password
.
Además de cambiar a SSH, también puede seguir usando HTTPS, si no le importa poner su contraseña en texto claro. Ponga esto en su ~/.netrc
y no le pedirá su nombre de usuario / contraseña (al menos en Linux y Mac):
machine github.com
login <user>
password <password>
Adición (vea el segundo comentario de VonC): en Windows el nombre del archivo es %HOME%/_netrc
.
Lea también el primer comentario de VonC en caso de que quiera cifrar.
Otra adición (ver el comentario del usuario 137717) que puede usar si tiene git 1.7.10 o más reciente .
Guarda en caché tu contraseña de github en git usando un asistente de credenciales :
Si está clonando los repositorios de GitHub utilizando 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 hable con GitHub.
Esto también funciona en Linux, Mac y Windows.
Aquí hay otra opción:
En lugar de escribir
git push origin HEAD
Podrías escribir:
git push https://user:[email protected]/path HEAD
Obviamente, con la mayoría de los shells, esto hará que la contraseña se guarde en caché en el historial, así que tenlo en cuenta.
Básicamente tienes dos opciones.
Si usa el mismo usuario en ambas máquinas, necesita copiar la clave .pub a su PC, por lo que github sabe que usted es el mismo usuario.
Si ha creado un nuevo archivo .pub para su PC y desea tratar a las máquinas como usuarios diferentes, debe registrar el nuevo archivo .pub en el sitio web de github.
Si esto todavía no funciona, es posible que ssh no esté configurado correctamente y que ssh no encuentre la ubicación de sus claves. Tratar
ssh -vv [email protected]
Para obtener más información por qué SSH falla.
Como muchos usuarios han dicho, solo tienes que cambiar la URL de tu repositorio git de https a SSH.
Si no ha generado una clave SSH en su máquina, entonces tendrá que hacerlo.
Solo como información adicional, después de hacer este cambio, seguía recibiendo el mismo error: Permiso denegado.
En mi caso, el problema era que estaba usando el Shell de Windows para ejecutar el comando ngh; ya que este comando debe abrir un mensaje para solicitar la frase SSH y el Shell de Windows no abre este tipo de mensajes, la autenticación acaba de fallar.
Entonces, solo tuve que abrir el shell git y ejecutar el comando ngh allí, poner la frase SSH en el indicador cada vez que lo pedía y "voilà" ... ¡Simplemente funcionó bien!
Cuando use https para git pull & push, simplemente configure remote.origin.url
para su proyecto, para evitar el ingreso de nombre de usuario (o contraseña) cada vez que presione.
Cómo configurar remote.origin.url
:
Url format: https://{username:password@}github.com/{owner}/{repo} Parameters in url: * username optional, the username to use when need authentication, if specified, no need to enter username again when need authentication, don''t use email, use your username that has no "@", otherwise the url can''t be parsed correctly, * password optional, the password to use when need authentication, if specified, no need to enter password again when need authentication, tip: this value is stored as plain text, so for security concern, don''t specify this param, * e.g git config remote.origin.url https://[email protected]/eric/myproject
@Actualizar - usando ssh
Creo que usar el protocolo ssh
es una solución mejor que https
, aunque el paso de configuración es un poco más complejo.
Pasos ásperos:
- Cree claves ssh usando el comando, por ejemplo,
ssh-keygen
en linux, en windowsmsysgit
proporcione comandos similares. - Mantenga la clave privada en la máquina local en la ubicación correcta, por ejemplo,
~/.ssh
. Y agréguelo al agentessh-add
mediante el comandossh-add
. - Sube la clave pública al servidor git.
- Cambie
remote.origin.url
del repositorio git al estilossh
, por ejemplo,[email protected]:myaccount/myrepo.git
- Luego, cuando tire o presione, no tendrá que ingresar el nombre de usuario ni la contraseña.
Consejos:
- Si su clave ssh tiene una frase de paso, entonces debe ingresarla en el primer uso de la clave después de cada reinicio de su máquina, de forma predeterminada.
@Actualizar - Cambiar entre https
y ssh
protocol.
Simplemente cambiar remote.origin.url
será suficiente, o puede editar repo_home/.git/config
directamente para cambiar el valor (por ejemplo, usando vi
en linux).
Por lo general, agrego una línea para cada protocolo, y comento uno de ellos usando #
.
p.ej
[remote "origin"] url = [email protected]:myaccount/myrepo.git # url = https://[email protected]/myaccount/myrepo.git fetch = +refs/heads/*:refs/remotes/origin/*
Fuente: Configuración de Git
El siguiente comando guardará su contraseña en la memoria por algún tiempo.
(Para git 1.7.10 o más reciente.)
$ git config --global credential.helper cache
# Set git to use the credential memory cache
$ git config --global credential.helper ''cache --timeout=3600''
# Set the cache to timeout after 1 hour (setting is in seconds)
Lo que funcionó para mí fue editar .git/config
y usar
[remote "origin"]
url = https://<login>:<password>@gitlab.com(...).git
No hace falta decir que esta es una forma insegura de almacenar su contraseña, pero hay entornos / casos en los que esto puede no ser un problema.
Necesitas realizar 2 pasos -
1) git remote remove origin
2) git remote add origin [email protected]:NuggetAI/nugget.git
Tenga en cuenta que la url de git es una url ssh
y no una url https .. La cual puede seleccionar desde aquí.
Para los no iniciados que están confundidos por las respuestas anteriores, puedes hacer:
git remote -v
que responderá algo así como
origin https://[email protected]/yourname/yourrepo.git (fetch)
origin https://[email protected]/yourname/yourrepo.git (push)
luego puede ejecutar el comando que muchos otros han sugerido, pero ahora sabe su nombre y su nombre de arriba, así que solo puede cortar y pegar su yourname/yourrepo.git
desde arriba en
git remote set-url origin [email protected]:yourname/yourrepo.git
Para los usuarios de Windows git, después de ejecutar git config --global credential.helper store
, si todavía solicita una contraseña, es mejor que compruebe dónde se escribe la configuración. usando este comando
git config --list --show-origin
En mi caso, edite manualmente el archivo de configuración ''C: / Archivos de programa / Git / mingw64 / etc / gitconfig'', agregando el siguiente texto, funciona.
[credential] helper = store
Puedes guardar tu contraseña de GitHub en Git:
Solo sigue las instrucciones de la documentación oficial del github.
Después de seguir las instrucciones del enlace anterior, debe poder presionar / jalar a / desde su repositorio sin tener que escribir su nombre de usuario / contraseña cada vez.
Si está usando ssh y su clave privada está encriptada con una frase de contraseña, entonces se le solicitará que ingrese la contraseña / contraseña para la clave privada cuando realice operaciones de red con Git como push
, pull
y fetch
.
Use ssh-agent para guardar las contraseñas de contraseña privada / credenciales de contraseña
Si desea evitar tener que ingresar su frase de contraseña cada vez, puede usar ssh-agent
para almacenar sus credenciales de contraseña de contraseña privada una vez por sesión de terminal, como explico en mi respuesta a No se pudo abrir una conexión con su agente de autenticación :
$ eval `ssh-agent -s`
$ ssh-add
En un Windows msysgit Bash, debe evaluar la salida de ssh-agent
, pero no estoy seguro de si necesita hacer lo mismo en otros entornos de desarrollo y sistemas operativos.
ssh-add
busca una clave privada en la carpeta .ssh
su hogar llamada id_rsa
, que es el nombre predeterminado, pero puede pasar una ruta de archivo a una clave con un nombre diferente.
Matando al agente
Cuando haya terminado con su sesión de terminal, puede cerrar ssh-agent
con el indicador de eliminación -k
:
$ ssh-agent -k
Como se explica en el manual de ssh-agent
:
-k
Mata al agente actual (dado por la variable de entorno SSH_AGENT_PID).
Tiempo de espera opcional
Además, puede tomar un parámetro de tiempo de espera opcional así:
$ ssh-add -t <timeout>
donde <timeout>
tiene el formato <n>h
durante <n>
horas, <n>m
durante <n>
minutos, etc.
Según el manual de ssh-agent
:
-t life
Establezca un valor predeterminado para la vida útil máxima de las identidades agregadas al agente. La vida útil se puede especificar en segundos o en un formato de hora especificado en sshd_config(5) . Una vida útil especificada para una identidad con ssh-add(1) anula este valor. Sin esta opción, la duración máxima predeterminada es para siempre.
Vea esta página para más formatos de tiempo .
Advertencia de seguridad para los usuarios de Cygwin
Los usuarios de Cygwin deben estar conscientes de un posible riesgo de seguridad con el uso de ssh-agent en Cygwin :
la gente debe ser consciente de los peligros potenciales de ssh-agent bajo cygwin [1], aunque bajo un netstat local y un portscan remoto, no parece que el puerto especificado en / tmp / ssh-foo sea accesible para nadie ...
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
Y en el enlace citado :
sin embargo, tenga en cuenta que los sockets de dominio Unix de cygwin son FUNDAMENTALMENTE INSEGUROS, por lo que DESCUBRIMO el uso de ssh-agent en cygwin.
cuando ejecuta ssh-agent en cygwin, crea el socket AF_UNIX en el directorio
/tmp/ssh-$USERNAME/
. bajo cygwin, los conectores AF_UNIX se emulan a través de los conectores AF_INET. puede ver fácilmente que si mira el archivo/tmp/ssh-$USERNAME/agent-socket-*
través del bloc de notas. verás algo así como
!<socket >2080
A continuación, ejecute
netstat -a
y sorpresa! Tienes algún programa escuchando el puerto 2080. Es ssh-agent. cuando ssh recibe el desafío RSA del servidor, se refiere a/tmp/ssh-$USERNAME/agent-socket-*
(en cygwin, en nuestro caso, eso significa que abrirá la conexión alocalhost:2080
) y pregunta a ssh-agent para procesar el desafío RSA con la clave privada que tiene, y luego simplemente pasa la respuesta recibida de ssh-agent al servidor.bajo unix, tal escenario funciona sin problemas, porque el kernel de unix comprueba los permisos cuando el programa intenta acceder al socket AF_UNIX. Para los sockets AF_INET, sin embargo, las conexiones son anónimas (lea "inseguro"). Imagina que tienes cygwin ssh-agent corriendo. el pirata informático malintencionado puede abrir su caja, localizar el puerto abierto utilizado por ssh-agent, abrir la conexión a su servidor ssh, recibir el desafío RSA, enviarlo a su agente ssh a través del puerto abierto que encontró, recibir respuesta RSA, enviarlo a ssh server y voila, ha iniciado sesión correctamente en su servidor como usted.
Si está utilizando git (por ejemplo, git bash) en Windows (y si no desea cambiar de https a ssh)
también puede usar https://github.com/Microsoft/Git-Credential-Manager-for-Windows
Esta aplicación mantendrá nombre de usuario y contraseña para usted ...
Si la clave ssh o .netrc no funcionaron para usted, entonces otra solución simple pero menos segura que podría funcionar para usted es git-credential-store - Helper para almacenar credenciales en el disco.
git config --global credential.helper store
Por defecto, las credenciales se guardarán en ~/.git-credentials
. Será creado y escrito para.
Tenga en cuenta que el uso de este asistente almacenará sus contraseñas sin cifrar en el disco, protegidas únicamente por los permisos del sistema de archivos. Si esto no puede ser una compensación de seguridad aceptable.
Tuve el mismo problema
así que cambia el archivo .git / config de mi proyecto
url = https://github.com/<your-user-here>/<your-repo-here>
a
url = [email protected]:<your-user-here>/<your-repo-here>
y agregue la clave pública ssh al perfil de git que está en configuración.
para la clave pública ssh
cat ~/.ssh/id_rsa.pub
Un error común es la clonación utilizando el valor predeterminado (HTTPS) en lugar de SSH. Puede corregir esto yendo a su repositorio, haciendo clic en "Clonar o descargar", luego haciendo clic en el botón "Usar SSH" sobre el campo de la URL y actualizando la URL de su origen en forma remota:
git remote set-url origin [email protected]:username/repo.git
Esto se documenta en GitHub: Cambio de URL remotas de HTTPS a SSH .
Actualización para HTTPS:
Github ha lanzado un nuevo programa para Windows que almacena sus credenciales cuando está usando HTTPS:
Usar:
Descarga el programa desde here
Una vez que ejecute el programa, editará su archivo .gitconfig
. Vuelva a .gitconfig
si editó el .gitconfig
correcto en caso de que tenga varios de ellos. Si no editó la correcta, agregue lo siguiente a su .gitconfig
[credential]
helper = !''C://Path//To//Your//Downloaded//File//git-credential-winstore.exe''
NOTA el salto de línea después de [credential]
. Es requerido.
Abre tu línea de comandos del cliente e intenta git push origin master
una vez. Si te pide una contraseña, ingrésala y estás listo. Contraseña guardada!