De vez en cuando está bien remangarse un poco y ver cómo funcionan las cosas a nivel de Sistema Operativo. En este tutorial veremos algunos problemas a la hora de trabajar con aplicaciones que usan vuestra SSH key.
Índice de contenidos
1. Introducción
Es posible que desde la llegada de macOS Sierra hayáis notado ciertas molestias a la hora de trabajar con vuestros repositorios remotos de Git. Esto lo habéis podido notar sobre todo si:
-
Usáis la línea de comandos
-
Tenéis vuestro fichero de identidad (supongamos que vuestro SSH key es
~/.ssh/id_rsa
) con clave de acceso (passphrase)
Los síntomas serán que, a partir de macOS Sierra, seguramente cada vez que vais a hacer una operación contra el servidor, como push
, pull
, o fetch
, os preguntará cual es vuestra clave para acceder al SSH key. Esto antes no ocurría porque la clave se guardaba en el llavero (Keychain), pero este comportamiento por defecto se ha quitado en macOS Sierra.
Aunque he hablado de la línea de comandos, seguramente también tengáis problemas con otras aplicaciones que igualmente usan vuestra SSH key, como por ejemplo el Sourcetree.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
-
Hardware: Portátil MacBook Pro 15» (2.9 GHz Intel i7, 16GB 2133 MHz LPDDR3, 500GB Flash Storage).
-
AMD Radeon Pro 460 4096 MB
-
Sistema Operativo: macOS Sierra 10.12.2
-
Git 2.10.1
3. Solucionando el problema con ssh-agent
Una solución rápida sería quitarle la clave (passphrase) a nuestro SSH key, pero teniendo en cuenta que nuestra SSH key define nuestra identidad, esta opción no sería nada recomendable ya que estaríamos facilitando mucho el robo de esta identidad.
Para poder mantener el acceso al SSH key con clave y no tener que estar poniendo la clave cada vez que queremos usar nuestra identidad, vamos a usar el programa ssh-agent
. Esta es una pequeña aplicación que guarda las claves en memoria mientras dura la sesión, de forma que cuando queremos acceder a nuestra identidad será ssh-agent
quién proporcione la clave en vez de tener que hacerlo nosotros.
Además vamos a combinar el uso de ssh-agent con nuestro llavero de claves (Keychain) de forma que la clave se guarde en este y tampoco tengamos que meter la clave cada vez que empezamos una nueva sesión al reiniciar la máquina. Esta en concreto es la funcionalidad que se ha desactivado con macOS Sierra.
Para ello vamos a crear el fichero ~/.ssh/config
con las siguientes líneas:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
Ahora (sólo hay que hacerlo la primera vez) vamos a añadir nuestra SSH key al ssh-agent
, de manera que introduzcamos la clave y se guarde en el llavero (Keychain). Para ello ejecutamos en un terminal:
$ ssh-add -K ~/.ssh/id_rsa
Importante el -K
que es lo que hace que se añada al Keychain.
Si queremos comprobar que se ha añadido correctamente, podemos ejecutar el siguiente comando para ver un listado de las SSH keys que están siendo gestionadas por el ssh-agent
:
$ ssh-add -l
Desde este momento deberíamos de poder acceder al SSH key sin necesidad de introducir la clave manualmente. Así que tanto Git como Sourcetree deberían de volver a funcionar con normalidad.
4. Referencias
5. Conclusiones
Muchas veces ejecutamos aplicaciones de escritorio, IDEs, … que nos facilitan la vida en nuestro trabajo diario, pero se nos olvidan los principios de funcionamiento de las cosas que usamos. Por eso de vez en cuando está bien remangarse un poco y ver cómo funcionan las cosas a nivel de Sistema Operativo.
Ya veis que, después de todo, tampoco es tan difícil, y vemos cómo con unos sencillos pasos podemos combinar comodidad y potencia.
6. Sobre el autor
Alejandro Pérez García (@alejandropgarci)
Ingeniero en Informática (especialidad de Ingeniería del Software) y Certified ScrumMaster
Socio fundador de Autentia Real Business Solutions S.L. – «Soporte a Desarrollo»
Socio fundador de ThE Audience Megaphone System, S.L. – TEAMS – «Todo el potencial de tus grupos de influencia a tu alcance»