Implementar la autenticación basada en claves SSH en Linux

SSH (Secured Shell) es un protocolo que crea una conexión criptográficamente segura entre el cliente SSH y los servidores remotos.

Utilizando SSH puede gestionar y administrar servidores remotos de forma segura. Esto puede ser útil de muchas maneras.

  • Despliegue de varios servidores
  • Parada/arranque de servicios a distancia
  • Automatización

y toda su creatividad (esperemos)…

Como administrador de sistemas, esto es algo básico que hay que saber.

Aprendamos cómo…

Voy a generar una clave privada y una clave pública. La clave privada debe almacenarse en su máquina cliente ssh y debe mantenerse segura. La clave pública debe copiarse en el servidor remoto para iniciar sesión en ese servidor desde la máquina cliente SSH sin necesidad de contraseña.

Aprenderá lo siguiente.

  • Instalar SSH (no es necesario si ya está instalado)
  • Generar claves SSH
  • Copiar la clave SSH a un servidor remoto
  • Iniciar sesión en el servidor remoto utilizando SSH

Para fines de demostración, tengo 2 servidores con las siguientes direcciones IP, un sistema es un cliente y el otro es un servidor en el que voy a iniciar sesión a través de ssh desde una máquina cliente.

  • Cliente (usuario -> geekflare) : 192.168.56.102
  • Remoto (usuario -> ubuntu) : 192.168.56.101

Instalación de SSH

Antes de seguir los pasos mencionados en este artículo, asegúrese de que openssh-server está instalado en los servidores. Si no está instalado, ejecute los siguientes comandos para instalarlo.

sudo apt-get install openssh-server

sudo systemctl enable ssh

sudo systemctl start ssh

Puede ejecutar el comando ssh para comprobar si está instalado en el sistema o no.

geekflare@geekflare:~$ ssh

uso: ssh [-46AaCfGgKkMnqsTtVvXxYy] [-B bind_interface]

           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]

           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]

           [-i archivo_identidad] [-J [usuario@]host[:puerto]] [-L dirección]

           [-l nombre_usuario] [-m mac_spec] [-O ctl_cmd] [-o opción] [-p puerto]

           [-Q opción_consulta] [-R dirección] [-S ruta_ct] [-W host:puerto]

           [-w local_tun[:remote_tun]] destino [comando]

Generar claves SSH

Esto debe hacerse en un servidor cliente.

Ejecute el comando ssh-keygen para generar una clave SSH. Simplemente pulse intro cuando le pida el archivo, la frase de contraseña, la misma frase de contraseña. Genera un par de claves en el directorio ~/.ssh por defecto. Id_rsa es la clave privada e id_rsa.pub es la clave pública asociada.

geekflare@geekflare:~$ ssh-keygen

Generar par de claves rsa pública/privada.

Introduzca el archivo en el que desea guardar la clave (/home/geekflare/.ssh/id_rsa):

Introduzca la frase de contraseña (vacía si no hay frase de contraseña):

Vuelva a introducir la misma frase de contraseña:

Su identificación se ha guardado en /home/geekflare/.ssh/id_rsa.

Su clave pública se ha guardado en /home/geekflare/.ssh/id_rsa.pub.

La huella digital de la clave es

SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 geekflare@geekflare

La imagen randomart de la llave es

 ---[RSA 2048]---- 

|o ..             |

| o |

|oo . . . o |

|.. *     . *     |

| B .   S . o. |

| O o . . . .. .|

| @ o o . E=. o |

| B o .o.= . |

| ... o. oo |

 ----[SHA256]----- 

Generará dos nuevos archivos en el directorio ~/.ssh.

Copiar la clave SSH al servidor remoto

Debe copiar la clave privada en la carpeta ~/ .ssh de un servidor remoto. La mayoría de los servidores ya deberían tener esta carpeta, si no es así, deberá crearla.

Para ello

  • Inicie sesión en el servidor remoto con el usuario con el que desea conectarse. En mi caso, es ubuntu
  • Asegúrese de que el directorio de trabajo actual es el directorio personal del usuario y, a continuación, cree una carpeta .ssh. También puede utilizar el siguiente comando único para crear una
mkdir -p ~/.ssh

Si ya tiene la carpeta .ssh entonces haga una copia de seguridad de la misma.

A continuación, vamos a empujar la clave pública de un servidor cliente.

En la máquina cliente (192.168.56.102), ejecute el siguiente comando para copiar la clave pública en el servidor remoto dentro de un archivo authorized_keys en el directorio .ssh.

geekflare@geekflare:~$ cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'

ubuntu@192.168.56.101's password:

Ejecute el siguiente comando para establecer los permisos en el archivo authorized_keys del servidor remoto.

geekflare@geekflare:~$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"

Genial, esto concluye la clave se intercambia y el permiso está todo establecido.

Inicie sesión en el servidor remoto mediante SSH

¡Hagamos una prueba para ver si funciona!

Iniciemos sesión en el servidor remoto (192.168.56.101) desde una máquina cliente (192.168.56.102) como usuario geekflare.

Ejecute el siguiente comando para probar, esta vez no le pedirá contraseña.

geekflare@geekflare:~$ ssh ubuntu@192.168.56.101

Bienvenido a Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)

 * Documentación: https://help.ubuntu.com

 * Gestión: https://landscape.canonical.com

 * Soporte: https://ubuntu.com/advantage

346 paquetes actualizables.

11 actualizaciones son de seguridad.

Última conexión: Lun 17 jun 00:10:32 2019 desde 192.168.56.101

Aquí tiene…

He iniciado sesión en el servidor remoto con éxito. Ejecutando el siguiente comando obtendrá los detalles de la IP de la máquina remota.

ubuntu@ubuntu:~$ ifconfig

enp0s3 Link encap:Ethernet HWaddr 08:00:27:9b:47:86 

          inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0

          dirección inet6: fe80::5c62:3267:b752:fe5d/64 Alcance:Enlace

          UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1

          RX paquetes:20239 errores:0 abandonados:0 desbordamientos:0 trama:0

          TX paquetes:5406 errores:0 abandonados:0 desbordamientos:0 trama:0

          colisiones:0 txqueuelen:1000

          Bytes de recepción:22678039 (22,6 MB) Bytes de transmisión:701710 (701,7 KB)

enp0s8 Link encap:Ethernet HWaddr 08:00:27:a9:4a:6b 

          inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0

          dirección inet6: fe80::54a9:761c:9034:21a2/64 Alcance:Enlace

          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

          RX paquetes:330 errores:0 abandonados:0 desbordamientos:0 trama:0

          TX paquetes:197 errores:0 abandonados:0 desbordamientos:0 trama:0

          colisiones:0 txqueuelen:1000

          Bytes de recepción:42847 (42,8 KB) bytes de transmisión:32774 (32,7 KB)

lo Link encap:Local Loopback 

          inet addr:127.0.0.1 Máscara:255.0.0.0

          dirección inet6: ::1/128 Alcance:Host

          UP LOOPBACK RUNNING MTU:65536 Metric:1

          RX paquetes:997 errores:0 abandonados:0 desbordamientos:0 trama:0

          TX paquetes:997 errores:0 abandonados:0 desbordamientos:0 portadora:0

          colisiones:0 txqueuelen:1

          Bytes de recepción:79654 (79,6 KB) bytes de transmisión:79654 (79,6 KB)

Conclusión

Configurar el intercambio de claves SSH es muy sencillo como puede ver. Espero que esto le ayude e interesado en aprender la administración de Linux y solución de problemas a continuación, echa un vistazo a este curso Udemy.