SSH: Instalación y Configuracion

SSH: Instalación y Configuracion

¿Qué es SSH?

SSH son las siglas de Secure Shell, un protocolo de red diseñado para permitir el acceso remoto a una terminal de manera segura. A diferencia de su antecesor, Telnet, el tráfico que utiliza SSH está cifrado, lo que garantiza la confidencialidad e integridad de los datos transmitidos. Este protocolo es ampliamente utilizado para la administración remota de dispositivos, como servidores, routers y switches.

SSH está disponible para una variedad de sistemas operativos, incluyendo Windows, Linux y macOS. Su mecanismo de cifrado se basa en 128 bits, lo que proporciona un alto nivel de seguridad y hace extremadamente difícil que un intruso pueda descifrar el contenido del tráfico. Esto lo convierte en una herramienta esencial para gestionar sistemas de manera remota de forma segura.


Instalación y Configuración de SSH

Supongamos que deseas instalar SSH para permitir conexiones seguras al servidor HOST001 y restringir el acceso únicamente a los usuarios del grupo ITGROUP. A continuación, se describe cómo hacerlo paso a paso.

1. Instalar SSH

En un sistema operativo Ubuntu Server, la instalación del servicio SSH se realiza utilizando el gestor de paquetes APT de la siguiente manera:

sudo apt update
sudo apt install openssh-server

2. Habilitar y arrancar el servicio SSH

El comando systemctl permite habilitar y gestionar servicios en sistemas Linux. Para habilitar el servicio SSH y asegurarte de que se inicie automáticamente al arrancar el sistema, utiliza el siguiente comando:

sudo systemctl enable ssh

Para iniciar el servicio SSH inmediatamente, ejecuta:

sudo systemctl start ssh

Una vez completado este paso, el servicio SSH estará en ejecución en tu servidor. Puedes conectarte desde un cliente SSH en Windows, como MobaXTerm, de la siguiente manera:


Configuración avanzada de SSH

Hasta este punto, hemos realizado una instalación básica de SSH. Sin embargo, para mejorar la seguridad, es recomendable implementar configuraciones adicionales, como el uso de claves públicas y privadas para autenticación, restringir el acceso al usuario root y limitar las conexiones a usuarios pertenecientes al grupo ITGROUP.

Orden de prioridad de las configuraciones de SSH

Antes de continuar, es importante comprender cómo se aplican las configuraciones de SSH y en qué orden se priorizan:

  1. Configuraciones definidas en la línea de comandos.

  2. Configuraciones definidas en el archivo SSH a nivel de usuario (~/.ssh/config).

  3. Configuraciones definidas en el archivo de configuración global (/etc/ssh/ssh_config).

Configuraciones en la línea de comandos

Las configuraciones a nivel de línea de comandos son útiles cuando solo necesitas aplicar una opción específica temporalmente. Por ejemplo, si deseas conectarte como el usuario root en lugar de un usuario normal como steve, puedes usar el siguiente comando:

ssh -o "User=root" dev

Otra opción útil es la bandera -F, que permite especificar un archivo de configuración alternativo en lugar del predeterminado:

ssh -F /ruta/al/archivo/config user@example.com`

Si deseas que SSH ignore todas las configuraciones definidas en los archivos de configuración, puedes usar:

ssh -F /dev/null user@example.com`

Configuraciones a nivel de usuario

Estas configuraciones se almacenan en el archivo ~/.ssh/config, que se crea la primera vez que un usuario utiliza SSH. El archivo sigue la siguiente estructura:

Host hostname1
    SSH_OPTION value
    SSH_OPTION value

Host hostname2
    SSH_OPTION value

Host *
    SSH_OPTION value`

La directiva Host puede contener un patrón o una lista de patrones separados por espacios. Cada patrón puede incluir:

  • *: Coincide con cero o más caracteres. Por ejemplo, Host * coincide con todos los hosts, mientras que 192.168.0.* coincide con hosts en la subred 192.168.0.0/24.

  • ?: Coincide exactamente con un carácter. Por ejemplo, Host 10.10.0.? coincide con todos los hosts en el rango 10.10.0.[0-9].

  • !: Cuando se usa al inicio de un patrón, niega la coincidencia. Por ejemplo, Host 10.10.0.* !10.10.0.5 coincide con cualquier host en la subred 10.10.0.0/24, excepto 10.10.0.5.

Ejemplo de configuración:

Host 192.168.243.129
   User s_user001
   Port 2222

Algunas otras configuraciones que se pueden agregar aquí

Una vez comprendido lo anterior, procederemos a configurar el archivo global de SSH (/etc/ssh/sshd_config) para mejorar la seguridad y restringir el acceso. Agregaremos o modificaremos las siguientes opciones:

Port 2222                  # Cambiar el puerto por defecto
PermitRootLogin no         # No permitir el Acceso a Root
MaxAuthTries 3             # Intentos antes de rechazar la conexion
MaxSessions 4              # Un maximo de conexiones
PubkeyAuthentication yes   # Habilitar la autentitacion por PubKey
PasswordAuthentication no  # Deshabilitar la conexion por contraseña
PermitEmptyPasswords no    # No permitir una contraseña en blanco
AllowGroups ITGROUP        # Permitir solo la conexion a un grupo

Una vez configurado el archivo /etc/ssh/sshd_config, lo que necesitamos es generar un par de llaves publicas y privadas.

Generación de claves SSH

En nuestra máquina local, generamos un par de claves SSH (pública y privada) utilizando el siguiente comando:

ssh-keygen -t rsa -b 4096 -C "s_user001@s-ubuntu.com"

El proceso generará una clave RSA de 4096 bits y solicitará una ubicación para guardarla y una frase de contraseña (opcional). El resultado será similar a este:

Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ~/.ssh/id_rsa
Your public key has been saved in ~/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:a/HhmtNbZU2wSLO9Zh8+74iPfynEzGem3kdVXlzq39A s_user001@s-ubuntu.com
The key's randomart image is:
+---[RSA 4096]----+
|            o ..o|
|           . = ++|
|            o +.+|
|             . =o|
|        S . + O.E|
|         = . X.B+|
|        o.o o =+=|
|       ..o.. =.o=|
|        o...++=++|
+----[SHA256]-----+

verificamos que efectivamente las llaves existen y se crearon

~ took 8s 
❯ ls .ssh\id_*
╭───┬─────────────────┬──────┬────────┬───────────────╮
│ # │      name       │ type │  size  │   modified    │
├───┼─────────────────┼──────┼────────┼───────────────┤
│ 0 │ .ssh\id_rsa     │ file │ 3.3 kB │ 2 minutes ago │
│ 1 │ .ssh\id_rsa.pub │ file │  749 B │ 2 minutes ago │
╰───┴─────────────────┴──────┴────────┴───────────────╯

Copiar la clave pública al servidor

Si nuestra máquina local es Linux, podemos usar la utilidad ssh-copy-id para copiar la clave pública al servidor:

ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@tuserver -p 2222

En Windows, debemos enviar la clave pública manualmente utilizando el siguiente comando:

❯ bat .ssh/id_rsa.pub | ssh usuario@tuserver "cat >> .ssh/authorized_keys"

Conexión SSH sin contraseña

Una vez configurado, podemos conectarnos al servidor utilizando solo las claves SSH, sin necesidad de contraseña:

❯ ssh 192.168.243.129
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-52-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Fri Feb 14 03:13:48 PM UTC 2025

  System load:  0.01               Processes:              244
  Usage of /:   36.6% of 18.53GB   Users logged in:        0
  Memory usage: 3%                 IPv4 address for ens33: 192.168.243.129
  Swap usage:   0%

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

Expanded Security Maintenance for Applications is not enabled.

193 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


s_user001@s-ubuntu:~$

Con esta configuración, logramos que solo los usuarios pertenecientes al grupo ITGROUP puedan conectarse al servidor. Además, restringimos el acceso para que únicamente se permita la conexión mediante claves públicas y privadas, lo que mejora significativamente la seguridad del servidor al eliminar la dependencia de contraseñas y reducir el riesgo de ataques de fuerza bruta.

Referencias

Linuxize. (2021, February 8). Using the SSH config file. Linuxize. https://linuxize.com/post/using-the-ssh-config-file/