IronWoods.es

Desarrollo web

Blog / Git / Gestión de remotos

Con una computadora y un sólo repositorio remoto, la conexión con Git es fácil de configurar con SSH, se genera la clave SSH y se registra la clave pública en el remoto. Con dos o n remotos, dos o n claves SSH. ¿Varias computadoras? Cada una funciona de forma independiente, con sus propias claves SSH, en los remotos se añaden cada una de las claves públicas de cada una de las computadoras que se quieren conectar, desde cada computadora. ¿Diferentes cuantas de Git? Se empieza a complicar...

Caso práctico

Trabajo con VSC y tengo dos usuarios de Github, uno para el trabajo (voy a llamarlo "working") y uno personal con mis "repos de toda la vida" (voy a llamarlo "oricis").
En el equipo actual tengo configurado el usuario "working", pero quiero actualizar mi repositorio notes, de mi usuario "oricis" en Github.

VSC una vez configurado un usuario ("working") "sólo" trabaja con el mismo.
Enviar cambios al repo de "oricis" o clonar repos privados del mismo, no es automático, ya que el usuario configurado (usuario "working") no cuenta con permisos para los repositorios del usuario "oricis", respondiendo a los comandos de Git con "Repository not found" o "Permission to oricis/xxx-repo.git denied to worker" según el caso.

Para usuario "worker" se creó en el sistema una clave SSH que podría ser:

~/.ssh/worker_key

Posteriormente se añadió la clave pública a la cuenta Github de "working" para poder trabajar con sus repositorios remotos.

Repetiremos, el proceso para añadir una clave pública de esta máquina a la cuenta Github del usuario "oricis".

Paso a paso

1. Crear una segunda clave para el usuario "oricis":

ssh-keygen -t ed25519 -C "oricis@example.com" -f ~/.ssh/oricis_keytest

2. Añadir la clave al sistema:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/oricis_keytest

3. Configurar el archivo ~/.ssh/config para que Ubuntu pueda identificar que clave usar en cada repositorio).

3.1 Edita (o crea) el archivo: nano ~/.ssh/config

3.2 Añade una configuración como esta:

# Cuenta Principal (usuario worker)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/worker_key

# Cuenta Secundaria (usuario oricis)
Host github-oricis # esto es el alias para tu segunda cuenta
HostName github.com
User git
IdentityFile ~/.ssh/oricis_keytest

4. Configurar el Repositorio Local

Ahora, en la carpeta del proyecto que quieres subir a la cuenta de "ociris", debes cambiar el "remoto" y la "identidad del autor" (opcionalmente, ver más adelante "Consideraciones"):

# Si el repo ya tiene un remoto (lo clonamos):
git remote set-url origin git@github-oricis:oricis/nombre-repo.git

# Si estamos en un repo nuevo:
git remote add origin git@github-oricis:oricis/nombre-repo.git

Y ya podemos introducir la clave SSH pública (~/.ssh/oricis_keytest.pub) en la cuenta Github de "oricis" (menú de usuario: Settings > SSH & GPG keys).

Una vez cambiado el remoto en la terminal, VSC detectará automáticamente que debe usar el alias github-oricis y, por lo tanto, usará la clave SSH correcta con pull o push.

¿Y si vamos a clonar un remoto privado de "oricis"?

Clonar repositorio remoto (funciona si es público o nuestro usuario "worker" tiene permisos):

git clone https://github.com/oricis/notes.git

para clonar un repositorio privado de "oricis" usamos el formato SSH e indicamos el alias:

git clone git@github-oricis:oricis/notes.git
Consideraciones

Si enviamos cambios a un repo usando dos usuarios diferentes, al visitar el historial en el remoto, esto queda reflejado.

Si sólo quisiéramos que aparezcan cambios introducidos por nuestro usuario "oricis" en la historia del remoto, hay que sobrescribir la información a nivel de repositorio local (proyecto actual) antes de hacer push.

Ejecuta:

git config user.name "oricis"
git config user.email "oricis@mail.com"

NOTA: usar los datos de usuario/email que usamos para nuestro remoto de "oricis". Estos cambios son solo para este proyecto