Conectarse a repositorios git con SSH

Publicado por Andrea Navarro en

En este artículo veremos como conectarnos a repositorios Git remotos en sistemas como Github y Gitlab utilizando SSH

El uso de servidores de repositorios Git puede traernos muchas ventajas en la realización de proyectos. Por un lado contamos con almacenamiento externo de el contenido reduciendo la posibilidad de una perdida de datos mientras que su interfaz gráfica permite agilizar ciertas operaciones, especialmente si nuestro conocimiento de los comandos de Git es limitado.

Para poder interactuar con estos repositorios remotos se utilizan cuentas creadas en dichos servicios que permiten al usuario limitar que tipo de acciones requieren una autenticación previa antes de realizarse. Dependiendo de la configuración de permisos del repositorio se solicita al usuario que está trabajando con el repositorio remotamente que se autentique para realizar ciertas acciones. Esto se puede volver un paso muy tedioso si se trabaja de manera continua sobre un proyecto. Para evitar este proceso es posible autenticarse utilizando autenticación SSH.

Crear claves

El primer paso es crear una clave privada y una pública para el dispositivo con el cual queremos acceder al repositorio remoto. Es importante notar que la clave privada deberá permanecer en el dispositivo y si se quiere trabajar en otro entonces deberán repetirse todos los pasos para cada uno.

Antes de crearla es recomendable verificar que la clave no esté ya creada ya que volver a ejecutar el comando se sobrescribiría la clave anterior y no sería posible recuperarla.

La clave privada puede generarse con el comando ssh-keygen como se muestra en este ejemplo.

ssh-keygen -t rsa

Esto generará dos archivos: a menos que especifiquemos otro nombre por defecto id_rsa será nuestra clave privada e id_rsa.pub la pública.

Configurar SSH

En el caso que hayamos creado una clave especificando su nombre es necesario configurar SSH para que sepa cuál es el nombre del archivo que contiene la clave. Si hemos creado las claves con los nombres por defecto no es necesario este paso.

Para realizar esta configuración es necesario modificar ( o crear en el caso que no exista) el archivo ~/.ssh/config

Dentro de este archivo se encontrará una lista de servidores que se conectaran por SSH y el archivo correspondiente para cada clave.

GitHub

Host github.com
  User git
  Hostname github.com
  IdentityFile ~/.ssh/nombre_clave

GitLab

Host gitlab.com
  User git
  Hostname gitlab.com
  IdentityFile ~/.ssh/nombre_clave

Donde nombre_clave es el nombre del archivo que contiene la clave privada. Para aprender más sobre la gestión de múltiples claves SSH recomiendo la lectura de este artículo.

Subir clave pública al servidor

GitHub

Para subir la clave pública a GitHub iniciamos sesión e ingresamos a la sección Settings en el menú superior derecho. Una vez adentro en el menú izquierdo ingresamos en SSH and GPG keys.

Esto nos mostrará una lista de las claves subidas con sus correspondientes nombres y datos de uso. En esta sección es posible eliminar las claves públicas ya subidas.

Para subir una nueva clave ingresamos en New SSH Key

En este formulario tendremos que pegar el contenido completo del archivo de nuestra clave pública (id_rsa.pub a menos que hayamos especificado otro nombre). También es requerido un nombre para identificar esa clave de otras que puedan estar subidas al servidor. Este nombre puede indicar, por ejemplo, a que dispositivo corresponde esta clave, de esta manera una vez que el dispositivo no esté más en uso sabremos cual clave pública ya no es necesaria.

GitLab

Para subir la clave pública a GitLab iniciamos sesión e ingresamos a la sección Preferences en el menú superior derecho. Una vez adentro en el menú izquierdo ingresamos en SSH keys.

Esta sección nos mostrará un formulario donde tendremos que pegar el contenido completo del archivo de nuestra clave pública (id_rsa.pub a menos que hayamos especificado otro nombre). También es requerido un nombre para identificar esa clave de otras que puedan estar subidas al servidor. Este nombre puede indicar, por ejemplo, a que dispositivo corresponde esta clave, de esta manera una vez que el dispositivo no esté más en uso sabremos cual clave pública ya no es necesaria.

Una opción extra que ofrece GitLab con respecto a Github es la de seleccionar una fecha de expiración para cada clave de manera que se vuelvan automáticamente invalidas después de esta fecha.

Más abajo en esta misma sección podemos ver la lista de las claves públicas ya subidas y la opción de eliminarlas.

Obtener dirección SSH del repositorio

Para poder tomar ventaja de esta configuración es necesarios que interactuemos con el repositorio a través de SSH. Para esto tendremos que obtener su dirección SSH.

Normalmente se sigue un patrón formado por la dirección del servidor, el nombre del usuario y el del proyecto del a siguiente forma.

git@servidor.com:usuario/proyecto

Para estar seguros de obtener la dirección correcta podemos ingresar en nuestro servidor y copiarla de nuestro proyecto.

Obtener dirección GitHub

Para obtener la dirección en GitHub dentro del proyecto en cuestión ingresamos en la opción Code. En la pestaña que se abrirá seleccionamos la opción SSH que nos dará la opción de copiar la dirección.

GitLab

En GitLab seguimos un proceso similar dentro del proyecto ingresando en Clone y copiando la dirección correspondiente a SSH.

Clonar repositorio con SSH

Una vez obtenida la dirección clonamos el proyecto con el sistema que utilicemos normalmente o directamente por linea de comando de la siguiente manera:

git clone git@servidor.com:usuario/proyecto

A partir de este punto se puede trabajar con el repositorio de manera normal, la única diferencia perceptible será que al querer realizar aquellas tareas que anteriormente requerían autenticación serán completadas sin solicitar usuario o contraseña ya que este proceso se realiza automáticamente comprobando nuestra clave privada almacenada en nuestro dispositivo con la clave pública subida en el servidor.

Modificar repositorios clonados con HTTP

En el caso que ya hayamos clonado previamente nuestro repositorio con HTTP una vez realizada la configuración para SSH podemos modificar la url para apuntar a esta con el siguiente comando.

git remote set-url origin git@servidor.com:usuario/proyecto

Espero que les sirva!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora