Digamos que alice
es un usuario de github.com, con 2 o más repositorios privados repoN
. Para este ejemplo, trabajaremos con solo dos repositorios nombrados repo1
yrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Debe extraerse de estos repositorios sin ingresar una contraseña probablemente en un servidor o en varios servidores. Desea realizar, git pull origin master
por ejemplo, y desea que esto suceda sin solicitar una contraseña.
No le gusta tratar con ssh-agent, ha descubierto (o lo está descubriendo ahora) sobre ~/.ssh/config
un archivo que le permite a su cliente ssh saber qué clave privada usar según el nombre de host y el nombre de usuario, con una entrada de configuración simple que se parece esta:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
Así que siguió adelante y creó su (alice_github.id_rsa, alice_github.id_rsa.pub)
par de claves, luego también fue al .git/config
archivo de su repositorio y modificó la URL de su control remoto origin
para que sea algo así:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
Y finalmente fuiste a la Settings > Deploy keys
sección de repositorio y agregaste el contenido dealice_github.id_rsa.pub
En este punto, puede hacerlo git pull origin master
sin ingresar una contraseña sin problemas.
pero ¿qué pasa con el segundo repositorio?
Por lo tanto, su instinto será tomar esa clave y agregarla a repo2
las claves de implementación, pero github.com generará un error y le dirá que la clave ya se está utilizando.
Ahora ve y genera otra clave (usando ssh-keygen -t rsa -C "alice@alice.com"
sin contraseñas, por supuesto), y para que esto no se convierta en un desastre, ahora nombrarás tus claves de esta manera:
repo1
Par de claves: (repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2
Par de claves: (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
Ahora colocará la nueva clave pública en repo2
la configuración de implementación de claves en github.com, pero ahora tiene que resolver un problema de ssh.
¿Cómo puede saber ssh qué clave usar si los repositorios están alojados en el mismo github.com
dominio?
Su .ssh/config
archivo apunta github.com
y no sabe qué tecla usar cuando es el momento de hacer la extracción.
Así que encontré un truco con github.com. Puede decirle a su cliente ssh que cada repositorio vive en un subdominio github.com diferente, en estos casos, serán repo1.github.com
yrepo2.github.com
Entonces, lo primero es editar los .git/config
archivos en sus clones de repositorio, para que se vean así:
Para repo1
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
Para repo2
[remote "origin"]
url = "ssh://git@repo2.github.com/alice/repo2.git"
Y luego, en su .ssh/config
archivo, ahora podrá ingresar una configuración para cada subdominio :)
Host repo1.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
IdentitiesOnly yes
Host repo2.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
IdentitiesOnly yes
Ahora puede hacerlo git pull origin master
sin ingresar ninguna contraseña de ambos repositorios.
Si tiene varias máquinas, puede copiar las claves en cada una de las máquinas y reutilizarlas, pero le aconsejaría hacer el trabajo de pierna para generar 1 clave por máquina y repositorio. Tendrás muchas más claves que manejar, pero serás menos vulnerable si una se ve comprometida.