Git en Bitbucket: siempre pedí la contraseña, incluso después de cargar mi clave SSH pública

180

Subí mi ~/.ssh/id_rsa.puba las claves SSH de Bitbucket como se explicó , pero Git todavía me pide mi contraseña en cada operación (como git pull). ¿Me he perdido algo?

Es un repositorio privado (tenedor del repositorio privado de otra persona) y lo cloné así:

git clone [email protected]:Nicolas_Raoul/therepo.git

Aquí está mi local .git/config:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://[email protected]/Nicolas_Raoul/therepo.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

En el mismo entorno con la misma clave pública, Git en Github funciona bien.
.sshes rwx------, .ssh/id_rsaes -rw-------, .ssh/id_rsa.pubes-rw-r--r--

Nicolas Raoul
fuente

Respuestas:

265

¿Estás seguro de que lo clonaste usando la url ssh?

La url de origen dice url = https://[email protected]/Nicolas_Raoul/therepo.gitque si está usando https, le pedirá una contraseña independientemente de sus claves ssh.

Entonces, lo que quieres hacer es lo siguiente:

Abra su archivo de configuración en su repositorio actual.

vim .git/config

y cambia la línea con la url de

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://[email protected]/Nicolas_Raoul/therepo.git

a

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = [email protected]:Nicolas_Raoul/therepo.git
manojlds
fuente
62
Tienes razon, gracias! Lo más probable es que haya clonado con la URL incorrecta. Reemplacé la URL .git/configcon [email protected]:Nicolas_Raoul/therepo.gity ahora funciona.
Nicolas Raoul
8
y para cambiar el control remoto usando git stackoverflow.com/questions/2432764/…
Alex Nolasco
3
¡Fue Bitbucket quien me sugirió la URL https al crear un repositorio! ¡Cómo!
Denis Kniazhev
44
Tenga en cuenta que si su bitbucket es privado, si desea usar el protocolo git, debe agregar su clave ssh al sitio web de BitBuket en su configuración.
cevaris
77
Tuve que cambiar la URL a ssh://[email protected]/userName/repoName.git- sin ssh://prefijo no funcionó.
trygub
34

Como se explica aquí , si clona con URL de SSH , no necesita ingresar nombre de usuario / contraseña cada vez que presiona / tira. Verifique la respuesta anterior por @manojlds

Pero si desea clonar con HTTPS y desea evitar ingresar el nombre de usuario / contraseña cada vez, puede almacenar las credenciales en la memoria caché con el siguiente comando:

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

donde 3600 (segundos) significa 1 hora, puede cambiarlo según sus necesidades.

Ajeet Shah
fuente
@atilkan En ese caso, ¿puede proporcionar su máquina / SO y la información de versión de git? Y el mensaje de error, si lo hay, cuando intenta establecer la configuración de caché.
Ajeet Shah
Cloné el depósito de bitbucket de alguien, y aquí están mis controles remotos. manecs-MBP:LocationTracker manec$ git remote -v origin https://[email protected]/Vysh1/locationtracker.git (fetch) origin https://[email protected]/Vysh1/locationtracker.git (push)
Banee Ishaque K
@AjeetShah, ¿qué pasa si ingresé la contraseña incorrecta? ¿también almacenaría en caché la contraseña incorrecta?
anaval
@anaval ¿Por qué no intentas eso y luego intentas ingresar la contraseña correcta después de borrar o deshabilitar el caché? Edite la respuesta y díganos cómo lo hizo :)
Ajeet Shah
19

Ya ha respondido anteriormente. Resumiré los pasos para verificar arriba.

ejecutar git remote -ven el proyecto dir. Si la salida muestra una URL remota que comienza con https://abc, es posible que necesite una contraseña de nombre de usuario cada vez.

Entonces, para cambiar la url remota, ejecute git remote set-url origin {ssh remote url address starts with mostly [email protected]:}.

Ahora ejecute git remote -v para verificar la URL remota modificada.

Consulte: https://help.github.com/articles/changing-a-remote-s-url/

shiva kumar
fuente
16

Hola, Googlers del futuro.

En MacOS> = High Sierra, la clave SSH ya no se guarda en KeyChain por motivos .

El uso ssh-add -Kya no sobrevive se reinicia también.

Aquí hay 3 posibles soluciones .

He usado el primer método con éxito. He creado un archivo llamado configen ~/.ssh:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
Vaiden
fuente
2
¡Esto necesita más atención! ¡Pasé años buscando una solución y la primera con el configarchivo /.sshfunciona perfectamente!
Kitson
1
Estas respuestas resolvieron mi problema en MacOs: cd ~/.ssh+ ls+ nano config(el archivo ya estaba creado) + agregar código en la respuesta de Vaiden. Luego controle X + Y para guardar el archivo.
Sébastien Gicquel
9

En el caso de solicitud HTTP, también es posible y alternativamente pegar las credenciales (con contraseña) directamente en la url:

http://username:[email protected]/...

Esto ahorrará el dolor de dar sus credenciales cada vez más. Simplemente modifique su .git / config (la url).

Sven W.
fuente
10
Pero no es seguro. Y no funciona si la contraseña tiene alguna letra como$%
Gank
3
Cualquiera que lea este comentario, recuerde: solo porque funciona , no significa que sea correcto . Si está copiando su contraseña en cualquier lugar de forma permanente, entonces lo está haciendo mal. Lo mismo con aquellos que siempre establecen permisos de carpeta para 777: detener, pensar, investigar, comprender y luego hacerlo correctamente.
dKen
9

Ninguna de estas respuestas me ayudó, resultó que mi problema era ligeramente diferente. Era ssh que pedía mi contraseña cada vez, antes de enviar la clave. Entonces, lo que tuve que hacer fue vincular mi contraseña con este comando:

ssh-add -K ~/.ssh/id_rsa

Luego le pedirá su contraseña y la almacenará. Esta podría ser la solución que está buscando si cada vez que se le solicita una contraseña, dice

Ingrese la frase de contraseña para la clave '/Users//.ssh/id_rsa':

Más información aquí.

NOTA: Utilicé esto en mi máquina Mac con éxito, pero como señaló @Rob Kwasowski a continuación, la Kopción de mayúsculas es exclusiva de Mac. Si no está en Mac, necesitará usar minúsculas k(que probablemente también funcione para Mac, pero no lo he probado).

stackPusher
fuente
1
Eso es genial, pero debería estar en minúsculas k:ssh-add -k ~/.ssh/id_rsa
Rob Kwasowski
¿podrías elaborar por favor?
stackPusher
Como se explica aquí: ssh.com/ssh/add , la opción de línea de comando está en minúscula k, no en mayúscula, ya que esas opciones distinguen entre mayúsculas y minúsculas.
Rob Kwasowski el
derecha, pero la opción K mayúscula también agregará la clave al llavero, mientras que la minúscula k solo agregará la clave al agente. Entonces, lo que estoy preguntando es '¿por qué no quieres que la llave también se agregue a tu llavero?'
stackPusher
1
Tenga en cuenta las diferencias de plataforma, -Kes específico para Mac: help.github.com/en/articles/error-ssh-add-illegal-option----k
Rob Kwasowski
5
webdev5
fuente
Creo que Step 1es para Windowsy Step 2es para Linuxpero lo olvidó mencionarlo correctamente.
Ajeet Shah
Ejecuté esos 3 pasos en mi caja de Windows y funcionó.
webdev5
2
En ese caso, me gustaría agregar que en el sistema operativo Linux, solo necesitamos el paso 2 y el paso 3 para el mismo efecto :)
Ajeet Shah
4

Lo siguiente supone el acceso a la línea de comandos a través de iTerm / Terminal a bitbucket.

Para MacOS Sierra 10.12.5, mi sistema manifestó un problema equivalente: solicitar mi frase de contraseña SSH en cada conexión a bitbucket.

El problema tiene que ver con las actualizaciones de OpenSSH en macOS 10.12.2, que se describen aquí en la Nota técnica TN2449 .

Es muy posible que desee adaptar su solución, pero lo siguiente funcionará cuando se agregue a su archivo ~ / .ssh / config:

Host *
    UseKeychain yes

Para obtener más información sobre las configuraciones de ssh, eche un vistazo a las páginas de manual de ssh_config:

% man ssh_config

Otra cosa: hay una buena escritura hasta el superusuario aquí que discute este problema y diferentes soluciones en función de sus necesidades y de configuración.

pob
fuente
2

Cloné el repositorio con HTTPS URL en lugar de SSH URL, por lo tanto, incluso después de agregar la clave SSH, me estaba pidiendo una contraseña en Bash Shell.

Me acaba de editar el ./.git/configarchivo y cambia el valor de la urlvariable mediante la simple sustitución de la https://dessh://

P.ej

[core]
        ...
        ...
        ...
[remote "origin"]
        url = https://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

Cambiado a:

[core]
        ...
        ...
        ...
[remote "origin"]
        url = ssh://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...
Swaroop Bhagwat
fuente
1

Es posible que deba verificar dos veces su archivo de identidades SSH. Puede estar guiando a BitBucket para que busque una clave privada diferente / incorrecta a la clave pública equivalente que ha guardado en BitBucket.

Compruébalo con tail ~/.ssh/config- verás algo similar a:

Host bitbucket.org
 HostName bitbucket.org
 IdentityFile ~/.ssh/personal-bitbucket-ssh-key

Recuerde que puede agregar identidades adicionales (como trabajo y hogar) con el ssh-addcomando, por ejemplo:

ssh-keygen -t rsa -C "companyName" -f "companyName"
ssh-add ~/.ssh/companyName

Una vez que haya confirmado qué clave privada se está examinando localmente, puede tomar su equivalente público, en este caso:

cat ~/.ssh/personal-bitbucket-ssh-key.pub | pbcopy

Y pegue esa cifra en BitBucket. Sus git push ahora (siempre que esté utilizando el clon SSH como se ha señalado en las respuestas) se permitirán sin contraseña, ya que su dispositivo es un amigable reconocido.

Esperemos que esto ayude a aclararlo para alguien.

Conceder
fuente
0

Conmigo, aunque ejecuté 'git clone ssh: //[email protected]: 7999 / projName / projA.git' Todavía me pedían la contraseña para este nuevo repositorio que cloné, así que comparando su .git / config a otros repositorios que funcionan. Resultó ser la url en la sección ["origen" remoto], se configuró en la ruta ssh anterior para el nuevo repositorio, pero se configuró en https: xxx para el que funciona .

Niños
fuente
0

Estaba teniendo otras rarezas al iniciar sesión. Encontré algo que parecía totalmente tonto pero que funcionó en mi caso. Simplemente vaya al llavero de MacOS. Encuentra el icono de bloqueo de inicio de sesión en la barra lateral. Haga clic para cerrar sesión y luego haga clic para iniciar sesión. Suena tonto pero resolvió mis problemas. Vale la pena intentarlo.

smileBot
fuente