¿Cómo evito la especificación del nombre de usuario y contraseña en cada git push?

317

Yo git pushtrabajo en un repositorio remoto de Git.

Todos pushme pedirán que ingrese usernamey password. Me gustaría evitarlo por cada impulso, pero ¿cómo configurarlo para evitarlo?

Leem.fin
fuente
66
Una respuesta está disponible aquí: stackoverflow.com/questions/6565357/…
kbdjockey
3
Larga historia corta: para github, solo siga estos dos enlaces help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
JRun
para bitbucket por favor siga este enlace
JDP

Respuestas:

346

1. Generar una clave SSH

Linux / Mac

Abrir terminal para crear claves ssh:

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

Para ventanas

(Solo funciona si el programa commit es capaz de usar certificados / claves ssh privadas y públicas)

  1. Usa Putty Gen para generar una clave
  2. Exporte la clave como una clave SSH abierta

Aquí hay un tutorial sobre masilla gen para los pasos anteriores

2. Asociar la clave SSH con el repositorio remoto

Este paso varía, dependiendo de cómo esté configurado su control remoto.

  • Si es un repositorio de GitHub y tiene privilegios administrativos, vaya a la configuración y haga clic en 'agregar clave SSH'. Copie el contenido de su ~/.ssh/id_rsa.puben el campo etiquetado 'Clave'.

  • Si su repositorio es administrado por otra persona, dele al administrador su id_rsa.pub.

  • Si su repositorio remoto es administrado por usted, puede usar este comando, por ejemplo:

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3. Configure su URL remota en un formulario que admita SSH 1

Si ha realizado los pasos anteriores y sigue recibiendo la solicitud de contraseña, asegúrese de que su URL de repositorio esté en el formulario

git+ssh://[email protected]/username/reponame.git

Opuesto a

https://github.com/username/reponame.git

Para ver su URL de repositorio, ejecute:

git remote show origin

Puede cambiar la URL con:

git remote set-url origin git+ssh://[email protected]/username/reponame.git

[1] Esta sección incorpora la respuesta de Eric P

Primer cero
fuente
3
Ejecuté el paso 1 y el paso 2 en ubuntu pero todavía me pide u_id passwd. También ejecuté: ssh -T [email protected]. Siempre lo mismo. ¿Qué hacer?
Radhika
44
@Rads ¿Has probado la otra respuesta, de Eric P ?
yo '
2
@dialex Se refería a una persona que administra el repositorio remoto de git.
selalerer
55
git remote set-url origin git + ssh: //[email protected]/username/reponame.git este comando me es útil.
Inteligencia artificial
2
Esto funcionó para mígit remote set-url origin [email protected]:/username/projectname.git
Kurt
181

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 vencimiento del 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) .

Nota: Credencial auxiliar que almacena la contraseña sin cifrar en el disco local.

Jay Patel
fuente
44
Gracias. ¿Puede explicar qué hace el comando config? Me pregunto por qué ni siquiera me pide una contraseña la primera vez que presiono a un repositorio.
HelloWorldNoMore
1
@vivoconunxino Probablemente porque es inherentemente inseguro. Desde la página del gitmanual: "El uso de este asistente almacenará sus contraseñas sin cifrar en el disco, protegidas solo por los permisos del sistema de archivos".
cmaster - reinstalar a monica el
15
A esta respuesta le falta una advertencia sobre el storeasistente de credenciales que almacena la contraseña en el disco sin cifrar.
cmaster - reinstalar a monica el
1
@DavidRTribble: ¿configurarlo en caché? O elimine el archivo relevante, consulte git-scm.com/docs/git-credential-store
serv-inc el
1
@DavidRTribble: mejor:git config --unset credential.helper
serv-inc
116

Si ya tiene configuradas sus claves SSH y todavía recibe la solicitud de contraseña, asegúrese de que su URL de repositorio esté en el formulario

git+ssh://[email protected]/username/reponame.git

Opuesto a

https://github.com/username/reponame.git

Para ver su URL de repositorio, ejecute:

git remote show origin

Puede cambiar la URL de la siguiente git remote set-urlmanera:

git remote set-url origin git+ssh://[email protected]/username/reponame.git
Eric P
fuente
Esto es lo que solucionó mi problema después de haberlo usado git initlocalmente, luego intenté presionar después de agregar el control remoto desde un nuevo repositorio en el sitio web de GitHub.
sheldonkreger
1
No estoy seguro de por qué esto no es parte de la respuesta aceptada. ¡Gracias!
jwalk
1
La respuesta aceptada debe estar compuesta por la respuesta aceptada real MÁS esta.
Puce
3
Puede omitir "git + ssh: //" y simplemente usar[email protected]/username/reponame.git
Ivan Shulev
1
@IvanShulev Intenté inicialmente sin git + ssh y no funcionó
Antonello
40

Simplemente use la --repoopción para el comando git push. Me gusta esto:

$ git push --repo https://name:[email protected]/name/repo.git
Pavel
fuente
37
O puede configurar esto de forma predeterminada congit remote set-url origin https://name:[email protected]/repo.git
ACyclic
También noto que configurar la URL solo [email protected]/....gitfunciona si no te molesta que te pidan la contraseña cada vez.
timday
Para los usuarios de github, git push --repo https://github.com/Username/repo funciona sin la .git extensión
Pe Dro
24

Guardar indefinidamente

Puede usar git-credential-store a través de

git config credential.helper store

que almacena su contraseña sin cifrar en el sistema de archivos :

El uso de este asistente almacenará sus contraseñas sin cifrar en el disco, protegidas solo por los permisos del sistema de archivos. Si esto no es una compensación de seguridad aceptable, intente con git-credential-cache o busque un ayudante que se integre con el almacenamiento seguro proporcionado por su sistema operativo.

Con un tiempo de espera

Use el git-credential-cache que por defecto almacena la contraseña durante 15 minutos.

git config credential.helper cache

para establecer un tiempo de espera diferente, use --timeout(aquí 5 minutos)

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

Almacenamiento seguro indefinidamente (OS X y Windows)

  • Si está utilizando una Mac, Git viene con un modo "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. Ejecutar lo siguiente en la línea de comando habilitará esta función:git config --global credential.helper osxkeychain . Tendrá que almacenar las credenciales en el llavero usando la aplicación Llavero también.
  • 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 . [enfatiza el mío]
serv-inc
fuente
Para Windows credential.helper cacheNO funciona. Debería ser git config --global credential.helper wincred.
Paulo Merson
1
Esto es útil cuando se ve obligado a usar https. Mi git en el servidor se cuelga si uso ssh, por lo que no tengo la opción de claves SSH.
Sridhar Sarnobat
8

Estaba usando el enlace https ( https://github.com/org/repo.git) en lugar del enlace ssh;

[email protected]:org/repo.git  

¡Cambiar me resolvió el problema!

ishan
fuente
6

Paso 1 -

Cree claves SSH en su sistema Linux usando el siguiente comando

ssh-keygen -t rsa -b 4096 -C "your_email"

Solicitará la frase de contraseña y el nombre del archivo (el valor predeterminado será ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)

Paso 2 -

Una vez creados los archivos, agregue la clave pública id_rsa.pub a la sección ssh de la cuenta github.

Paso 3 -

En su máquina, agregue la clave privada id_rsa a ssh-agent usando el siguiente comando

ssh-add ~/.ssh/id_rsa 

Paso 4 -

Ahora agregue la URL remota [email protected]: user_name / repo_name.git a su repositorio local de git usando el siguiente comando.

git remote remove origin
git remote add origin [email protected]:user_name/repo_name.git

Eso es.

Anil Agrawal
fuente
5

En el sistema operativo Windows, use esto en su lugar, esto funciona para mí:

https://{Username}:{Password}@github.com/{Username}/{repo}.git

p.ej

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git push origin master
Ayejuni Ilemobayo Kings
fuente
5

Solo quería señalar algo sobre la solución que se dijo anteriormente varias veces:

git config credential.helper store

Puede usar cualquier comando que requiera una contraseña después de esto. No tienes que empujar. (también puede extraer, por ejemplo) Después de eso, no necesitará escribir su nombre de usuario / contraseña nuevamente.

TrollAxeThrower
fuente
3

Usé la respuesta que sugirió Pavel y funcionó para mí. Mi diferencia fue hacerlo mientras agregaba el control remoto así:git remote add (alias) https://(name:password)@github.com/(the remote address).git

dsmryder
fuente
3

Ejecutar el siguiente comando resolvió el problema para mí.

git config --global credential.helper wincred

Consulte la siguiente documentación de github:

https://help.github.com/articles/caching-your-github-password-in-git/
Krishna
fuente
3

Hasta donde yo sé, hay simplemente dos formas seguras : ssh o passwd encriptadas usando un almacén de claves .

SSH

  1. Inicie sesión en su github;
  2. Visita: https://github.com/settings/keys ;
  3. Nueva clave SSH;
  4. cat ~/.ssh/id_rsa.pub, péguelo allí, nómbrelo y guárdelo (si no tiene ese archivo, genere uno para usted ssh-keygen -t rsasimplemente ingresando para todas las indicaciones);
  5. Vaya a su repositorio local y actualice su control remoto git remote set-url origin git+ssh://[email protected]/username/reponame.git: puede verificarlo primerogit remote -v );
  6. Aquí tienes, solo touch t; git add t; git commit -m "test"; git pushy confirma que sí para disfrutar del mundo sin contraseña .

passwd Cifrado usando un almacén de claves

Si solo lo usa git config --global credential.helper storecomo otros mencionaron, sus contraseñas no cifradas se almacenarán en un texto sin formato en el ~/.git-credentialsque no es seguro como parece.

Intenta encriptarlo como

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

git config --global credential.helper store

En este caso, lo estás usando https://[email protected]/username/reponame.git.

Hearen
fuente
2

Mi solución en Windows:

  1. Haga clic derecho en el directorio para presionar y seleccione "Git Bash Here".
  2. ssh-keygen -t rsa (Presione enter para todos los valores)
  3. Verifique la terminal para: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. Copia la clave pública del archivo especificado.
  5. Vaya a su perfil de GitHub => Configuración => SSH y claves GPG => Nueva clave SSH => Pegue su clave SSH allí => Guardar
Мони Мон
fuente
2

Si su PC es segura o no le importa la seguridad de la contraseña, esto se puede lograr de manera muy simple. Suponiendo que el repositorio remoto está en GitHub y origines su nombre local para el repositorio remoto, use este comando

git remote set-url --push origin https://<username>:<password>@github.com/<repo>

El --pushindicador garantiza que esto cambie la URL del repositorio solo para el git pushcomando. (La pregunta que se hizo en la publicación original es git pushsolo sobre el comando. Requerir un nombre de usuario + contraseña solo para operaciones push es la configuración normal para público repositorios en GitHub. Tenga en cuenta que los repositorios privados en GitHub también requerirían un nombre de usuario + contraseña para las operaciones de extracción y extracción , por lo que para un repositorio privado no querrá usar el --push flag...)

ADVERTENCIA: Esto es inherentemente inseguro porque:

  1. su ISP, o cualquier persona que registre sus accesos a la red, puede ver fácilmente la contraseña en texto plano en la URL;

  2. Cualquier persona que tenga acceso a su PC puede ver su contraseña usando git remote show origin.

Es por eso que usar una clave SSH es la respuesta aceptada.

Incluso una clave SSH no es totalmente segura . Cualquiera que obtenga acceso a su PC aún puede, por ejemplo, hacer cambios que destruyen su repositorio o, lo que es peor, enviar confirmaciones haciendo cambios sutiles en su código. (Todos los commits empujados son obviamente muy visibles en GitHub. Pero si alguien quisiera cambiar su código subrepticiamente, podrían--amend un commit previo sin cambiar el mensaje de commit, y luego forzarlo a empujarlo. Eso sería sigiloso y bastante difícil de notar en la práctica. )

Pero revelar su contraseña es peor . Si un atacante conoce su nombre de usuario + contraseña, puede hacer cosas como bloquearlo de su propia cuenta, eliminar su cuenta, eliminar permanentemente el repositorio, etc.


Alternativamente, por simplicidad y seguridad, puede proporcionar solo su nombre de usuario en la URL, de modo que tendrá que escribir su contraseña cada vez, git pushpero no tendrá que dar su nombre de usuario cada vez. (Me gusta mucho este enfoque, tener que escribir la contraseña me da una pausa para pensar cada vez que lo hago git push, así que no puedo git pushpor accidente).

git remote set-url --push origin https://<username>@github.com/<repo>
Radfast
fuente
¿Qué @pasa si la contraseña tiene , está rompiendo el comando pensando contraseña después de @ como parte del servidor git?
Pranav Singh
Si su contraseña contiene '@', está solo aquí, lo siento. ¿Puedes cambiar tu contraseña?
radfast
Necesito hacer una solicitud para cambiar la contraseña, ya que estaba haciendo la automatización para la integración continua con una cuenta de servicio (no personal). En este momento usé SSH Keys para un inicio de sesión seguro
Pranav Singh
1

Todo esto surge porque git no proporciona una opción en los comandos clone / pull / push / fetch para enviar las credenciales a través de una tubería. A pesar de que proporciona credential.helper, se almacena en el sistema de archivos o crea un demonio, etc. A menudo, las credenciales de GIT son de nivel de sistema y la tarea de invocar los comandos de git es responsabilidad de mantenerlos seguros. Muy inseguro de hecho.

Esto es lo que tuve que solucionar. 1. La versión de Git (git --version) debe ser mayor o igual que 1.8.3.

GIT CLONE

Para la clonación, use "git clone URL" después de cambiar la URL del formato, http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} a http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}

Luego purgue el repositorio de la contraseña como en la siguiente sección.

PURGANDO

Ahora, esto se habría ido y

  1. escribió la contraseña en el origen remoto de git. Escribe "git remote -v" para ver el daño. Corrija esto configurando la URL de origen remota sin contraseña. "git remote set_url origin http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. escribió la contraseña en .git / logs en el repositorio. Reemplace todas las instancias de pwd usando un comando unix como find .git / logs -exec sed -i 's / {my_url_with_pwd} // g' {} \; Aquí, {my_url_with_pwd} es la URL con contraseña. Dado que la URL tiene barras diagonales, debe ser escapado por dos barras diagonales. Por ejemplo, para la URL http: // kris: [email protected]/proj.git -> http: \\ / \\ / kris: [email protected] \\ / proj.git

Si su aplicación está utilizando Java para emitir estos comandos, use ProcessBuilder en lugar de Runtime. Si debe usar Runtime, use getRunTime (). Exec que toma la matriz de cadenas como argumentos con / bin / bash y -c como argumentos en lugar de la que toma una sola cadena como argumento.

GIT FETCH / PULL / PUSH

  1. establezca la contraseña en la URL remota de git como: "git remote set_url origin http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. Ejecute el comando git fetch / push / pull. Entonces no se le pedirá la contraseña.
  3. Realice la purga como en la sección anterior. No te lo pierdas.
Krishna
fuente
0

Debe configurar una clave privada SSH, puede revisar esta página , cómo hacer la configuración en Mac, si está en Linux, la guía debería ser casi la misma, en Windows necesitaría una herramienta como MSYS .

RageZ
fuente
0

Parece que, al menos cuando se usa TortoiseGIT en Windows, es posible crear las claves SSH y transferirlas al servidor GIT usando simplemente:

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
EquipDev
fuente