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.
Los pasos generales son los siguientes:
Se creará la carpeta .ssh en la carpeta personal, o bien, ejecutar el siguiente comando:
mkdir ~/.ssh
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.
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:
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.
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.
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:
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í:
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