Hero

Como usar multiples llaves de SSH con GIt

Octubre 28, 2013

kendall
GIT

Si en algún momento les ha pasado que necesitan acceder a un repositorio en git por medio de otra cuenta que no sea la personal o simplemente necesitan hacer una conexion por SSH con una segunda public key de autenticacion que no es la principal de su computador, y se han visto en problemas, aqui aprenderas como solucionarlo facil y rapido.

Para este ejemplo daremos por un hecho que ya tienes una public key creada en tu computador y por tanto tienes los archivos que se generan por defecto: id_rsa y id_rsa.pub si es que usaste llaves tipo RSA.

  1. Crear nueva llave publica.

Primero hay que crear una segunda public key, en este caso le llamare “secondid”.

Vamos a nuestra terminal y e ingresamos la siguiente comando que nos pedira cierta información como se aprecia a continuación:

$ ssh-keygen -f ~/.ssh/secondid -C "secondid"

Generating public/private rsa key pair.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /Users/kendall/.ssh/secondid.

Your public key has been saved in /Users/kendall/.ssh/secondid.pub.

The key fingerprint is:

af:5f:d2:e4:ch:67:54:3b:32:4e:4f:84:b3:37:fb:55 secondid

The key’s randomart image is:

+—[ RSA 2048]----+

| … |

| .oo |

| . . oo. |

| o o . .=. |

| . o =o E|

| . + o .. .|

| … . ..|

| + …|

| . . = ..|

+-----------------+

  1. Modificar el config de SSH.

Seguidamente crearemos un archivo llamado config dentro de nuestra carpeta .ssh y ahi mismo escribiremos una configuracion para que se use por defecto nuestra secondid para poder acceder a un repositorio disponible en github.

$ cd ~/.ssh
$ .ssh vim config

# Default GitHub user
Host github.com
 HostName github.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/secondid                          

En este archivo podemos tener varias instrucciones diferentes, de forma basica tenemos:

En la primer linea la instruccion “Host” seguida de un “Alias”

En la segunda linea tenemos el “HosName” seguido por el “Host” o “domain” al cual accederemos.

En la Tercer linea indicamos que la autenticacion a usar sera por medio de Public Key.

Y en la cuarta linea tenemos la indicacion del archivo (public key) que se usara en lugar de nuestra llave por defecto.

  1. Verificación de las configuración.

Por ultimo debemos asegurarnos que nuestro sistema este detectando correctamente nuestra nueva llave publica, nuevamente en la terminal ingresamos el comando ssh-add -l para listar las public key que tenemos registradas en nuestro omputador, seguidamente agregaremos nuestra llave publica recien creada con el comando ssh-add [path/to/file] y por ultimo ejecutamos nuevamente el comando ssh-add -l para corroborar que se halla agregado exitosamente.

~ssh-add -l
2048 2b:af:ee:d7:57:7a:02:0e:6d:43:4f:fe:be:65:4f:3c ~/.ssh/id_rsa (RSA)

~ ssh-add .ssh/secondid
Enter passphrase for ~/.ssh/secondid: 
Identity added: /Users/kendall/.ssh/secondid (/Users/kendall/.ssh/secondid)
~  ssh-add -l     
2048 68:ef:d6:1e:4b:3b:a3:52:6f:b0:c3:4b:da:e8:d1:9f ~/.ssh/id_rsa (RSA)

2048 af:58:12:e4:cd:67:54:3b:3b:4e:59:84:b3:e7:fb:55 ~/.ssh/secondid (RSA)

Hecho esto podemos realizar un “git clone” con normalidad sabiendo que de ahora en adelante nuestro github estara siendo usado atraves de nuestra recien creada public key “secondid”.

  1. Generando alias en el archivo “config”

En el dado caso que no quisieramos cambiar la llave publica que se usara por defecto para github podemos crear un alias para la segunda llave publica con una configuracion en el archivo config como la siguiente:

# Second GitHub user

Host sec-github.com

     HostName github.com

     PreferredAuthentications publickey

     IdentityFile ~/.ssh/secondid

Con esto realizado la conexion al repositorio de git pasaria de ser con el hostname a usar el alias:

git@github.com:accountname/reponame.git -> git@alias:accountname/reponame.git

De esta forma todo lo que tendremos que hacer es utilizar el alias que acabamos de crear en lugar del dominio directamente:

“git@alias:accountname/reponame.git”

ejemplo:

~ git clone git@sec-github.com:kendallsv/myirepositorio.git

Espero esto les sea de tanta ayuda como fue para mi, y recuerden que para acceder a una conexion ssh regular por terminal podemos hacerlo de la misma forma siempre y cuando hallamos creado la configuracion en nuestro archivo config y usemos el alias que pusimos ahi en ves del domain-name en la instrucción de conexión.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.