Escribir esto para aquellos que recién comienzan con Git y BitBucket en Windows y que no están tan familiarizados con Bash (ya que este es un problema común y un resultado de Google de alto rango al buscar el mensaje de error dentro de la pregunta).
Para aquellos a quienes no les importa HTTPS y que buscan una solución rápida, desplácese hasta el final de esta respuesta para obtener instrucciones en FOR THE LAZY
Para aquellos que buscan resolver el problema real, siga las instrucciones a continuación:
Solucionar el problema de SSH lo más rápido posible
Este es un conjunto de instrucciones derivadas de la URL vinculada por VonC. Fue modificado para ser lo más resistente y sucinto posible.
Establezca su información global si aún no lo ha hecho:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
Verifique OpenSSH:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
¿Ves algo así?
- Sí: continuar
- No: vaya a la sección FOR THE LAZY o siga el artículo vinculado de VonC.
Vea si ya ha generado las claves:
$ ls -a ~/.ssh/id_*
Si hay dos archivos, puede omitir el siguiente paso.
$ ssh-keygen
Deje todo como predeterminado, ingrese una frase de contraseña. Ahora debería ver resultados con este comando:
$ ls -a ~/.ssh/id_*
Busque un archivo de configuración existente:
$ ls -a ~/.ssh/config
Si obtiene un resultado, consulte este archivo para obtener información errónea. Si no existe ningún archivo, haga lo siguiente:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
Confirmar los contenidos:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
- Se requiere el espacio único antes de "IdentityFile".
Compruebe que está iniciando el agente SSH cada vez que ejecuta GitBash:
$ cat ~/.bashrc
- Si ve una función llamada
start_agent
, este paso ya se ha completado.
- Si no hay archivo, continúe.
- Si hay un archivo que no contiene esta función, está en una situación difícil. Probablemente sea seguro agregarlo (usando las instrucciones a continuación), ¡pero puede que no lo sea! Si no está seguro, haga una copia de seguridad de su .bashrc antes de seguir las instrucciones a continuación o pase a la sección FOR THE LAZY .
Ingrese lo siguiente en GitBash para crear su archivo .bashrc:
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
Verifique que el archivo se haya creado correctamente (el suyo solo debe diferir donde aparezca "su nombre de usuario"):
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
- Cierre GitBash y vuelva a abrirlo.
- Se le debe solicitar su frase de contraseña (para el archivo SSH que generó anteriormente).
- Si no aparece ningún mensaje, no configuró una frase de contraseña o GitBash no está ejecutando el script .bashrc (¡lo cual sería extraño, así que considere revisar su contenido!). Si está ejecutando esto en una Mac (OS X),
.bashrc
no se ejecuta de forma predeterminada, .bash_profile
es. Para solucionar esto, coloque este fragmento en su .bash_profile
:[[ -s ~/.bashrc ]] && source ~/.bashrc
Si no ingresó una frase de contraseña, habría visto algo como esto al iniciar GitBash:
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
Y lo siguiente debería devolver resultados:
$ ssh-add -l
Sin embargo, si obtiene lo siguiente de ssh-add -l
:
Could not open a connection to your authentication agent.
No generó el agente SSH y su .bashrc es probablemente la causa.
Si, al iniciar GitBash, ves esto:
Initializing new SSH agent...
sh.exe": : No such file or directory
Eso significa que olvidó escapar de $ con a \ al hacer eco en el archivo (es decir, las variables se expandieron). Vuelva a crear su .bashrc para resolver esto.
Verifique que el agente se esté ejecutando y que se hayan agregado sus claves:
$ ssh-add -l
Debería devolver algo similar a esto:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
Ejecute el siguiente comando para obtener su clave pública:
$ cat ~/.ssh/id_rsa.pub
(debería devolver algo que comience con "ssh-rsa ......"
- Haga clic en el icono de la ventana de GitBash
- Haz clic en Editar
- Haga clic en marcar
- Resalte la clave pública con el mouse (incluido el
ssh-rsa
bit inicial y el == youremail@yourdomain.com
bit final )
- Haga clic derecho en la ventana (realiza una copia)
- Pegue su clave pública en el Bloc de notas.
- Elimine todas las líneas nuevas de modo que sea solo una línea.
- Presione
CTRL+A
luego CTRL+C
para copiar la clave pública nuevamente en su portapapeles.
Configure su clave privada con BitBucket realizando los siguientes pasos:
- Abra su navegador y navegue al sitio BitBucket.org
- Inicie sesión en BitBucket.org
- Haz clic en tu avatar (arriba a la derecha)
- Haga clic en Administrar cuenta
- Haga clic en Claves SSH (en Seguridad en el menú de la izquierda)
- Haga clic en Agregar clave
- Ingrese
Global Public Key
por la etiqueta
- Pegue la clave pública que copió del Bloc de notas
Una Global Public Key
entrada ahora debería estar visible en su lista de claves.
- Regresar a GitBash
- cd en el directorio que contiene su proyecto
- Cambie su origen a la variación SSH (no será así si ejecutó los pasos FOR THE LAZY )
Revisa tus controles remotos:
$ git remote -v
Cambie a la URL de SSH:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
Verifique que las cosas estén funcionando:
$ git remote show origin
Debería ver algo como esto:
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
¡HECHO!
Puede optar por usar HTTPS en lugar de SSH. Tendrá que escribir su contraseña durante las operaciones remotas (se almacena en caché temporalmente después de que la escriba una vez). Aquí es cómo puede configurar HTTPS:
Para los perezosos
Debe solucionar el problema de SSH como lo describe VonC; sin embargo, si tiene prisa por comprometerse y no tiene las herramientas / tiempo / conocimiento para generar una nueva clave pública en este momento , establezca su origen en la alternativa HTTPS:
> https://accountname@bitbucket.org/accountname/reponame.git
Usando una herramienta GUI como TortoiseGit o herramientas de línea de comando .
Aquí está la documentación de esta URL de origen alternativa.
Línea de comando para agregar un origen si no existe:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
Línea de comando para cambiar un origen existente:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
NOTA: su nombre de cuenta no es su correo electrónico.
También es posible que desee configurar su información global:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Luego intente presionar nuevamente (no es necesario comprometerse nuevamente)
git push origin master