Al incorporarme a mi actual lugar de trabajo, me pidieron que creara una nueva cuenta de GitHub antes de poder ser miembro de la organización de GitHub de la empresa y, a su vez, obtener acceso a todos los repositorios de proyectos privados.
No fue hasta que dejé el portátil del trabajo en mi taquilla pero seguía necesitando hacer algo que sentí la necesidad de gestionar mis dos cuentas de GitHub en mi portátil personal (¿quién necesita el equilibrio entre trabajo y vida privada?)
Para complicar las cosas, el proyecto en el que estoy trabajando hace referencia a otros repositorios privados en su bloque de dependencias de package.json
y necesita acceder a ellos en npm install
, que por defecto utiliza la clave ssh de mi cuenta personal de GitHub.
Después de algunas pruebas y fracasos, así es como finalmente conseguí que funcionara:
Crea una nueva clave ssh y añádela a la cuenta de GitHub del trabajo
$ ssh-keygen -t rsa -b 4096 -C "my_work_email@my_company.com"
Digamos que la nueva clave ssh se llamó «work_rsa», ahora copia el contenido del archivo de clave pública recién generado (work_rsa.pub en este ejemplo) y pégalo en la página de configuración de la cuenta de GitHub del trabajo como se describe en la página de ayuda de GitHub.
Modificar el archivo de configuración ssh ( ~/.ssh/config)
Abrir el archivo de configuración en un editor de texto (crearlo si no hay uno en la carpeta ~/.ssh) y añade lo siguiente:
# Personal GitHub account
Host github.com
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa# Work GitHub account
Host github.com-work
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/work_rsa
Clonar el repo del proyecto de trabajo (con una dirección ligeramente diferente)
Para clonar el repo del proyecto de trabajo usando la nueva clave ssh necesitamos ajustar un poco la dirección ssh del repo. La url del host tiene que coincidir con el Host definido en el archivo de configuración ssh del último paso, es decir, donde en la dirección hay github.com
, sustituirlo por github.com-work
.
E.g, con la siguiente dirección ssh del repo privado que obtenemos de GitHub:
[email protected]:/.git
Necesitamos retocar su dirección así antes de poder git clone
la misma:
[email protected]:/.git
$ git clone [email protected]:/.git
Modificar el package.json para instalar las dependencias del repo privado
En el proyecto que clonó localmente, encuentre las dependencias del repo privado en su package.json y hacer la misma modificación a su dirección de repo que en el paso 3 (yo no cometería estas modificaciones ya que rompe todo para otras personas que también están trabajando en este proyecto):
"dependencies": {
"private-module": "git+ssh://[email protected]/.git
...
}
*Podría ser necesario hacer primero una instalación manual para uno de los módulos privados en la terminal:
$ npm install git+ssh://[email protected]/
Para que los repos privados sean reconocidos en el ssh known_hosts
y se pueda acceder durante la instalación de npm de las dependencias del proyecto.