Introducción
En algunos casos he necesitado clonar o subir un proyecto de github o gitlab desde diferente cuenta, y subir o configurar repositorios con alguna cuenta diferente para cada uno, sin embargo, cuando se utiliza una sola cuenta coo global, ésto no se podría realizar, por lo que he utilizado ésta configuración que les mencionaré, para poder realizar dichas configuraciones.
Ahora, muchos quizás dirán, por qué no usas algo más productivo como VSCODE, o codium, bueno, aquí es gusto de cada quién y sus necesidades, en mi caso, prefiero realizar los proceso desde la terminal, y por cada repositorio subir los cambios de manera que no afecte a todos los demás, así que, si alguien más tiene otro método de realizarlo, sería perfecto que comparta su idea.
Configuración
Los pasos generales son los siguientes:
- Crear carpeta .ssh
- Generar clave ssh por usuario
- Guardar la clave pública ssh en github o gitlab
- Agregar la clave generada a ssh
- Configurar el archivo ~/.ssh/config
- Configurar los repositorios
1.- Crear carpeta .ssh
Se creará la carpeta .ssh en la carpeta personal, o bien, ejecutar el siguiente comando:
mkdir ~/.ssh
2.- Generar clave ssh por usuario
Una vez creado la carpeta, desde la terminal entrar al directorio, y generar las claves por cada correo la clave ssh, con el siguiente comando:
cd ~/.ssh
ssh-keygen -o -t rsa -b 4096 -C "correo-usuario-uno@dominio.com"
Al ejecutar el comando, pedirá el nombre para los archivos que se generen, como recomendación, utilizar el correo como nombre de archivo, con un guión al final y el servidor, si es para github o gitlab, de tal modo que los archivos generados quedarán de la siguiente manera:
- Archivo de clave privada: correo-usuario-uno@dominio.com-github
- Archivo de clave pública: correo-usuario-uno@dominio.com-github.pub
Por cada clave que se genere en el directorio .shh se guardan dos archivos, uno sin extensión y otro con .pub.
- SI NECESITAN USAR EL MISMO CORREO EN GITLAB Y GITHUB, GENERAR DOS CLAVES CON EL MISMO CORREO, PERO CON EL NOMBRE DE GITHUB O GITLAB AL FINAL DE CADA ARCHIVO, PARA DIFERENCIARLO.
3.- Guardar la clave pública ssh en github o gitlab
Ahora, una vez que ya se hayan generado las claves ssh, iniciar sesión en github o gitlab según sea el caso.
Ir a la sección de SSH de acuerdo al servidor de su elección y clic en el botón Agregar clave SSH:
- Github: https://github.com/settings/keys
- Gitlab: https://gitlab.com/-/profile/keys
Para agregar las claves, abrir el archivo .pub correspondiente para cada servidor, copiar el contenido tal cual aparece en el archivo, y pegarlo dentro del campo Clave o Key. de acuerdo al servidor de su selección.
Pa
Una vez pegado el contenido, clic en Guardar o agregar clave.
4.- Agregar la clave generada a ssh
Una vez que la clave ya fue agregada en los correspondientes servidores, es necesario propagarlas en nuestro equipo, para ésto se usa el comando siguiente:
ssh-add ~/.ssh/correo-usuario-uno@dominio.com-github
Aquí, se usa el archivo de la clave privada, NO EL ARCHIVO .PUB. Repetir el proceso de añadido de claves por cada cuenta de usuario que se haya añadido.
5.- Configurar el archivo ~/.ssh/config
Ahora, es necesario crear un archivo de texto llamado config dentro del directorio ~/.config
Y dentro de éste archivo, se configurará las cuentas que se hayan añadido, ejemplos:
Host user1.gitlab.com HostName gitlab.com User git IdentityFile ~/.ssh/usuario1@outlook.com.com-gitlab Host user2.gitlab.com HostName gitlab.com User git IdentityFile ~/.ssh/usuario2@outlook.com-gitlab Host user1.github.com HostName github.com IdentityFile ~/.ssh/usuario1@outlook.com-github Host user2.github.com HostName github.com IdentityFile ~/.ssh/usuario2@outlook.com-github
Nomenclatura:
- Host: nombre con el que se usar en los repositorios
- HostName: es el servidor al que aputna, puede ser gitlab, github, o algun IP particular si se usa un servidor personal
- User git, ahí no cambia
- IdentityFile: es la ruta del archivo con la clave privada que se generó previamente, ojo, es el archivo con la clave privada.
Una vez que se guarden los cambios del archivo config, ahora tocar probar la conexión con éste comando:
ssh -T git@nombre-host
Ejemplo: el host se toma del archivo config
ssh -T git@user1.gitlab.com
Para gitlab, la salida del comando es algo así:
Para github, la salida del comando es algo así:
6.- Configurar los repositorios
Ahora, para cada repositorio que se clone, se usará el usuario de acuerdo al servicio, por ejemplo:
git clone git@user1.github.com:usuariogithub/nombrepositorio.git
Y con ésto, el repositorio quedará configurado para se administrado por el usuario con el que se clonó, adicionalmente, se deben añadir las siguientes opciones al archivo config de cada repositorio, con el nombre y correo del usuario:
[user] name = "Nombre Usuario 1" email = usuario1@outlook.com
Si se requiere cambiar el usuario manualmente de algún repositorio existente, se realizará dentro del repostorio, en la carpeta .git/config y editar la línea que dice:
url = git@user1.github.com:/usuario/repositorio.git
Y solo configurar o reemplazar el user1-github.com por el nombre del host que se declaró en la carpete .ssh/config, ésto de acuerdo con el usuario que requieran y el servicio que corresponda.
Ésto es algo engorroso, sin embargo, podría resultar útil para algunos que lo requieran, ya saben lo que se dice, en gustos se rompen géneros, y todo depende de la necesidad que se tenga