No se pueden enviar cambios al repository remoto con varios usuarios

Configuré git con éxito y empujé mi proyecto al repository remoto.

Ya había configurado mi user.name global y user.email ejecutando lo siguiente:

 git config --global user.name 'user1' git config --global user.email 'user1@example.com' 

Ahora tengo otro repository para el que necesitaba un usuario diferente, así que creé otro user específico para ese repo ejecutando:

 git config user.name 'user2' git config user.email 'user2@example.com' 

Y cuando intenta ejecutar git push , no me deja presionar mi código y dice

 Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 

Me estaba permitiendo impulsar mis cambios con el usuario global, ¿qué es diferente ahora? Soy nuevo en git y es difícil para mí llevarme bien.

Editar: Tengo ssh keys separadas para mi github account y mi bitbucket account . Es decir, quiero github ssh a mi repo github utilizando la configuration global y a mi repo bit bucket utilizando configuraciones específicas de repo .

Cambiar el nombre de usuario y el correo electrónico del usuario para un repository git no tiene nada que ver con la key ssh que se utilizará para impulsar el repository de subida.

Esa key ssh es por defecto ~/.ssh/id_rsa.pub .
Esa key pública ( publicada en la página de count de usuario de BitBucket ssh ) es la que determina quién es el usuario cuando empuja a BitBucket.

La configuration user.name / user.email solo se usa para mostrar la identidad correcta para los commits enviados al repository BitBucket. No tiene que reflejar el propietario real de dicho repository de BitBucket (que está determinado por la key pública ssh, o para el protocolo https, por la count de usuario de nombre de usuario / contraseña de BitBucket).

Si desea utilizar una key pública ssh diferente (registrada en un uso de BitBucket diferente), entonces, como mencioné en " ¿Cómo cambiar el usuario de git ssh para un ~/.ssh/config remoto temporalmente? ", Necesitaría un ~/.ssh/config file

 git remote set-url origin anotheruser:reponame 

Con anotheruser siendo una input en el file ~/.ssh/config , haciendo reference a otra key ssh privada de otro usuario:

 Host anotheruser HostName bitbucket.org User git IdentityFile ~/.ssh/anotheruser 

Tenga en count que siempre está usando ' git ' como el usuario para la session ssh con la que está presionando BitBucket.
Pero dado que está haciendo reference a la key ssh privada (y pública) adecuada, BitBucket sabrá quién es usted y, más importante aún, si tiene derecho a presionar a ese repository.

Suponiendo que ya tiene keys ssh separadas para ambas counts y vinculado a las respectivas counts, Siguiendo resolvió mi problema:

  1. Abra una window de terminal.
  2. Edite el file ~ / .ssh / config. (Si no tiene un file de configuration, cree uno)
  3. Agregue un alias para cada combinación de identidad, por ejemplo
  4. Cierra y guarda el file.
 Host github.com HostName github.com PrefernetworkingAuthentications publickey IdentityFile ~/.ssh/personalid Host bitbucket.org HostName bitbucket.org PrefernetworkingAuthentications publickey IdentityFile ~/.ssh/personalid 

Cargar keys ssh

  1. Ejecute ssh-agent si aún no está ejecutándose

    eval ssh-agent $ SHELL

    $ SHELL es la variable de entorno para su shell de inicio de session.

  2. ssh-add -l

  3. Cargue la key recién agregada si todavía no está cargada por ssh-add /path/to/yourKey

¡Hecho!

Fuente: Aquí