Autenticación por medio de SSH

By valbornoz Jan. 17, 2023, 8:19 p.m. ssh-agent ssh servidores

Caso 1: Para bajar cambios de un repositorio de Github a un servidor remoto se requiere que Github conozca las llaves ssh del servidor remoto y el equipo local

Caso 2: Para bajar cambios de un repositorio de Github a un servidor remoto se requiere unicamente la llave de nuestro equipo local

Caso 1: Como conectarse a un servidor remoto desde una maquina local

Tenemos la siguiente situación, buscamos tener acceso a un servidor remoto desde nuestra maquina local, la maquina local cuenta con un usuario local que cuenta con sus propia claves ssh de la siguiente manera

Maquina local clave
id_rsa PPP222
id_rsa.pub PPP111
Servidor remoto clave
id_rsa SSS222
id_rsa.pub SSS111
AutorizedKeys PPP111

Como se puede observar nuestra maquina local cuenta con una llave privada y una llave publica, en este ejemplo solo requerimos la llave publico de nuestra maquina local, esta debe ser agregada de forma manual en nuestro servidor remoto en el archivo authorized_keys como se muestra en la imagen.

De esta forma cuando nos conectemos desde nuestra maquina local al servidor remoto, el servidor remoto buscara en el archivo Authorized Keys la llave publica de nuestro equipo local y lo reconocerá para darle acceso al servidor remoto.

Importante: Este ejemplo muestra como bajar cambios a un servidor haciendo uso de dos llaves ssh, las de la maquina local para llegar al servidor y las llaves del servidor remoto para bajar cambios de github.

El siguiente diagrama muestra el flujo que sigue la autenticación ssh.

  1. Desde la maquina local realizamos la conexión al servidor remoto con el usuario local este usuario local contiene un ssh agent con nuestras claves agregadas.
  2. Se establece la conexión de la maquina local al servidor remoto.
  3. Se valida la conexión por parte del servidor remoto haciendo uso de authorized keys, ahora entramos como el usuario admin_server. El servidor remoto cuenta con sus propias llaves publicas y privadas.
  4. Bajar cambios: El usuario admin_server baja cambios al servidor con las llaves del servidor remoto, las llaves de usuario admin_server se encuentran agregadas a Github. (La llave del servidor funciona porque no tiene passphrase)

Caso 2: Como conectarse a un servidor remoto desde una maquina local con SSH AGENT Y SSH AGENT FORWARDING

SSH AGENT

ssh-agent es una manejador para nuestras claves SSH, es un servicio en segundo plano de manera independiente al servicio principal de SSH. Esto permite mantener las claves privadas en memoria, descifradas y listas para usarse. Esto nos evita el hecho de ingresar nuestras claves continuamente.

ssh-agent generalmente en sistemas como linux se inicia en el comienzo de una sesión

Comandos

Agregar claves al ssh-agent

ssh-add

Mostrar las claves privadas accesibles en el agente:

ssh-add -l

Mostrar las claves publicas accesibles en el agente:

ssh-add -L

Eliminar todas las llaves actuales en el agente

ssh-add -D

SSH AGENT FORWARDING

Es un servicio mediante el cual nosotros como un cliente SSH podemos hacer que un servidor SSH use el agente ssh local en el servidor en el que buscamos iniciar sesión, como si fuera nuestro equipo local allí.

Cuando desde la maquina local iniciamos la conexión por medio de SSH, se iniciara proceso para poder usar nuestro ssh-agent en el servidor remoto.

  1. Nuesta maquina local intentará ponerse encontacto con el agente que se encuentra en el servidor remoto
  2. El servidor remoto reenvia la solicitud a nuestra maquina local
  3. La maquina local contesta la solicitud del servidor remoto para establece la conexión.

De esta forma nuestro ssh-agent local se ha compartido con el servidor remoto.

Importante: Este ejemplo muestra como bajar cambios desde una maquina a un servidor remoto haciendo uso de solo las llaves ssh de nuestra maquina local.

Realizaremos el mismo ejemplo anterior usando unicamente nuestras llaves locales y haciendo uso del servicio Forward Agent

  1. Desde nuestra maquina local agregamos nuestras llaves a nuestro ssh-agent
  2. Nos conectamos por medio de ssh al servidor remoto, se realiza el proceso Forward Agent
  3. Se entra al servidor remoto haciendo uso del ssh-agent de nuestro equipo local
  4. Bajamos cambios del repositorio de github haciendo uso de nuestras claves ssh locales