• Blog
  • ¿Qué es SSH (Secure Shell Protocol) y cómo funciona?

¿Qué es SSH (Secure Shell Protocol) y cómo funciona?

20min

En la gestión de infraestructuras digitales, la seguridad no es una opción, sino el cimiento sobre el cual se construye cualquier proyecto web fiable. Seguramente, si alguna vez has necesitado gestionar un servidor a distancia, te habrás preguntado qué es SSH y por qué es el estándar absoluto frente a métodos antiguos como Telnet.

Esta tecnología no solo permite enviar órdenes a una máquina remota, sino que garantiza que cada bit de información viaje protegido bajo capas de cifrado inquebrantables. En este artículo, vamos a desglosar el funcionamiento de este protocolo y cómo puedes aprovecharlo para administrar tus servicios de forma profesional y segura.

Índice

¿Qué es SSH (Secure Shell Protocol)?

Para entender qué es SSH, debemos visualizarlo como un túnel blindado y privado que atraviesa la red pública de internet. Secure Shell se trata de un protocolo de red diseñado para permitir una comunicación segura entre dos sistemas informáticos. Su principal función es facilitar el acceso remoto a servidores, permitiendo a los administradores ejecutar comandos, mover archivos y gestionar configuraciones sin riesgo de que terceros intercepten las credenciales o los datos.

A diferencia de sus predecesores como Telnet o rlogin, SSH cifra toda la sesión de terminal desde el inicio. Esto significa que, incluso si un atacante lograra capturar los paquetes de datos, solo vería una secuencia de caracteres aleatorios imposibles de descifrar sin las claves criptográficas adecuadas.

¿Cómo funciona la arquitectura de SSH?

El protocolo opera bajo una estructura lógica que asegura la identidad de ambos extremos antes de permitir cualquier intercambio de información.

El modelo cliente-servidor en las conexiones de terminal

La base de este sistema reside en una relación de confianza mutua entre dos componentes de software específicos. Por un lado tenemos el cliente SSH, que es la aplicación instalada en tu ordenador local desde la cual lanzas las peticiones. Mientras que por otro lado se encuentra el servidor SSH, un proceso que corre de forma permanente en la máquina remota esperando solicitudes de conexión. El cliente es el encargado de iniciar la negociación, mientras que el servidor evalúa si el solicitante tiene los permisos necesarios para acceder al sistema.

Para que esta comunicación sea fluida, ambas máquinas deben hablar el mismo lenguaje técnico, generalmente basado en implementaciones libres como OpenSSH. Una vez que el servidor acepta la solicitud del cliente, se crea un canal seguro donde el teclado de tu ordenador local actúa directamente sobre el procesador del servidor remoto. Esta estructura permite que cientos de administradores puedan gestionar una misma infraestructura de forma centralizada y segura.

Funcionamiento del puerto 22 por defecto y cómo cambiarlo

Por estandarización de la IANA, el protocolo SSH escucha de forma nativa en el puerto 22 de cualquier servidor. Este valor es conocido por todos los administradores, pero lamentablemente también por todos los bots y atacantes que escanean la red en busca de puertas abiertas. Por eso, aunque el puerto 22 es el punto de partida, su uso en entornos de producción debe ser analizado con cautela para evitar un exceso de intentos de acceso fallidos en los registros de seguridad.

Por ello, una de las primeras medidas de endurecimiento (hardening) más recomendadas es aplicar el cambio de este puerto por uno menos previsible, situado en el rango superior (por ejemplo, el 2202). Al desplazar el servicio de su ubicación estándar, logramos «ocultar» la puerta de entrada ante ataques automatizados de fuerza bruta. Aunque no es una medida de seguridad definitiva por sí sola, reduce drásticamente el ruido de ataques y mejora la eficiencia de los sistemas de defensa perimetral.

El proceso de autenticación y establecimiento de la sesión segura

Previamente al intercambio de información, el protocolo ejecuta una fase de negociación técnica en la que el servidor y el cliente acuerdan qué algoritmos van a utilizar para proteger la sesión, asegurando que ambos soporten los estándares de seguridad más modernos. Una vez establecido el túnel cifrado, el servidor presenta su «huella digital» al cliente para confirmar que no se trata de una suplantación de identidad.

Tras validar el servidor, llega el turno de la autenticación del usuario, que puede realizarse mediante una contraseña tradicional o, preferiblemente, a través de llaves criptográficas. Si el sistema confirma la validez de las credenciales, se abre la sesión de terminal y el usuario recibe el prompt de comandos. Todo este proceso garantiza que, desde el primer carácter enviado, la comunicación sea invulnerable a ataques de tipo Man-in-the-Middle.

¿Para qué sirve el protocolo SSH en el entorno profesional actual?

Más allá de ser una simple consola, SSH es el motor que impulsa la automatización y la gestión de la infraestructura moderna.

Administración remota de servidores web y sistemas operativos Linux

Esta es la utilidad más extendida del protocolo, permitiendo a los técnicos realizar tareas complejas sin necesidad de interfaces gráficas que consuman recursos innecesarios del servidor. Desde la instalación de parches de seguridad hasta la configuración de servidores Apache o Nginx, todo se realiza de forma directa y veloz. La terminal SSH ofrece un control quirúrgico sobre el sistema, algo vital cuando se manejan servicios de alta disponibilidad.

Además, el uso de SSH permite trabajar de forma concurrente en múltiples servidores desde una sola ventana de comandos en tu equipo local. Esto facilita enormemente las tareas de mantenimiento preventivo y la monitorización de procesos en tiempo real.

Gestión segura de infraestructuras en la nube y contenedores Docker

Con la explosión de la tecnología Cloud, SSH se ha adaptado para ser el puente de entrada a instancias virtuales que no tienen una consola física asociada. Al crear una instancia en la nube, el sistema nos proporciona una llave SSH para que podamos tomar el control de forma inmediata y segura. Es la herramienta por excelencia para interactuar con infraestructuras efímeras que se crean y destruyen según la demanda de tráfico.

En el caso de Docker, aunque el comando nativo permite entrar en un contenedor, SSH sigue siendo fundamental para gestionar el nodo o servidor donde corren esos contenedores. Incluso existen flujos de trabajo donde se levantan pequeños servidores SSH dentro de los propios contenedores para tareas de depuración profunda. Esta versatilidad asegura que, sin importar la tecnología de despliegue, el administrador siempre tenga una puerta trasera segura para intervenir.

Ejecución de scripts y tareas de automatización de forma desatendida

SSH permite enviar comandos directamente sin necesidad de abrir una sesión interactiva, lo que lo convierte en el mejor aliado de la automatización. Podemos configurar tareas programadas (cronjobs) que conecten a servidores remotos para realizar copias de seguridad, limpiar bases de datos o verificar el estado de los servicios. Todo esto ocurre de forma invisible y segura en segundo plano, optimizando el tiempo del equipo técnico.

Esta capacidad es especialmente útil en arquitecturas de microservicios, donde es necesario propagar cambios de configuración en decenas de máquinas simultáneamente. Mediante herramientas de orquestación que se apoyan en SSH, es posible garantizar que toda nuestra flota de servidores esté perfectamente sincronizada. La automatización vía SSH reduce el error humano y asegura que los protocolos de mantenimiento se cumplan con precisión matemática.

Túneles de tráfico para proteger conexiones a bases de datos locales

Una de las funciones más potentes y a la vez desconocidas de este protocolo es el reenvío de puertos o SSH Tunneling. Esta técnica permite «envolver» el tráfico de aplicaciones que no tienen cifrado nativo dentro del túnel seguro de SSH. Por ejemplo, podemos conectar a una base de datos MySQL remota de forma local como si estuviera en nuestro propio PC, pero con todos los datos viajando protegidos por la red.

Este método no solo añade seguridad, sino que también permite saltar restricciones de firewall de forma legítima durante tareas de desarrollo. Al crear un túnel, estamos extendiendo un cable virtual seguro desde nuestro equipo hasta el servidor. Es una solución elegante para trabajar con herramientas gráficas de gestión de datos sin exponer los puertos de la base de datos a todo internet.

Transferencia cifrada de archivos pesados mediante protocolos SFTP y SCP

Cuando hablamos de mover información, la seguridad es tan importante como la velocidad. El protocolo SFTP (SSH File Transfer Protocol) utiliza la capa de transporte de SSH para ofrecer una alternativa robusta al viejo FTP, eliminando la vulnerabilidad de enviar archivos y claves en texto plano. Es el estándar para subir contenidos a la web o descargar logs de errores para su análisis local.

Por otro lado, el comando SCP (Secure Copy) permite transferencias rápidas de archivo único o directorios directamente desde la línea de comandos. Al compartir la misma infraestructura que SSH, no requiere configurar servicios adicionales en el servidor, lo que simplifica la administración. Ambas herramientas garantizan que tus activos digitales lleguen íntegros a su destino, protegidos por el mismo cifrado que blinda tus sesiones de terminal.

Tipos de cifrado utilizados en Secure Shell

Para que entendamos realmente qué es SSH y por qué es tan seguro, debemos analizar los tres engranajes criptográficos que trabajan en conjunto.

Cifrado simétrico para la transferencia de datos segura

Este tipo de cifrado utiliza una única clave que tanto el cliente como el servidor comparten para codificar y decodificar la información. Es el método encargado de proteger el grueso de los datos durante la sesión, ya que es computacionalmente muy rápido. La clave se genera de forma dinámica para cada conexión, lo que significa que, incluso si alguien robara una clave de una sesión antigua, no podría usarla para descifrar sesiones actuales o futuras.

Lo fascinante de este proceso es que la clave nunca se envía de un lado a otro; ambas máquinas la deducen de forma independiente mediante un intercambio matemático inteligente. En la actualidad, los algoritmos como AES-GCM son los preferidos por su capacidad para cifrar gigabytes de datos por segundo sin afectar al rendimiento del servidor. Es la armadura que hace que tu información sea ilegible para cualquiera que no sea el destinatario legítimo.

Cifrado asimétrico para la generación de llaves públicas y privadas

A diferencia del anterior, el cifrado asimétrico utiliza un par de claves distintas pero relacionadas matemáticamente: la llave pública y la llave privada. La llave pública es la que compartes con el mundo, mientras que la privada debe guardarse bajo siete llaves en tu equipo local. Lo que se cifra con una, solo puede descifrarse con la otra, creando un sistema de autenticación casi infalible.

Este método es el que se utiliza para realizar la fase de negociación inicial y para autenticar tu identidad sin enviar nunca tu contraseña por la red. Es el estándar de seguridad profesional en SSH, ya que permite entrar al servidor mediante un proceso de firma digital que un atacante no puede replicar. Al usar llaves asimétricas, eliminamos el riesgo de que una filtración de base de datos de contraseñas comprometa el acceso a nuestra infraestructura.

Algoritmos de hashing para verificar la integridad de la información

El tercer componente esencial es el hashing, el cual se encarga de asegurar que nadie haya alterado los datos mientras viajaban por internet. Un hash es como una «huella dactilar» digital única generada a partir de un bloque de datos. Si un solo bit del mensaje cambia durante la transmisión (ya sea por un error técnico o un ataque malintencionado), el hash resultante en el destino no coincidirá con el original y el sistema descartará el paquete de inmediato.

Esta verificación de integridad ocurre constantemente en segundo plano durante toda la sesión SSH. Gracias a algoritmos como SHA-2, el protocolo puede garantizar que los comandos que envías lleguen exactamente igual a como los escribiste. Es la garantía final de que la comunicación no solo es privada, sino también auténtica e inalterable, cerrando el círculo de seguridad que define a Secure Shell.

¿Cómo conectar a un servidor por SSH?

Pasar de la teoría a la práctica es un proceso sencillo si sigues estos pasos estructurados para establecer tu primer enlace seguro.

1. Identificación de la dirección IP pública y el usuario del servidor

El primer requisito es conocer las coordenadas de tu destino digital. Necesitas la dirección IP que tu proveedor ha asignado a tu servidor y un nombre de usuario válido para loguearte. Habitualmente, en una instalación limpia se utiliza el usuario root (superusuario), aunque por seguridad es aconsejable crear usuarios con privilegios limitados lo antes posible para las tareas cotidianas.

Tener estos datos anotados y verificados te ahorrará errores de conexión frustrantes. Asegúrate también de que tu proveedor no tenga un firewall externo bloqueando las peticiones entrantes. Una vez que tienes clara la dirección y tu identidad, estás listo para invocar al protocolo desde tu propia máquina.

2. Apertura de la terminal de comandos o cliente SSH especializado

Dependiendo de tu sistema operativo, la herramienta de acceso variará. En macOS y Linux, no necesitas instalar nada adicional, ya que la terminal nativa incluye el cliente OpenSSH por defecto. Simplemente abre la aplicación «Terminal» y estarás a un comando de distancia de tu servidor. Es la forma más integrada y profesional de trabajar.

Si eres usuario de Windows, tienes varias opciones excelentes. Puedes usar la nueva Terminal de Windows, que ya soporta SSH de forma nativa, o recurrir a clásicos como PuTTY o MobaXterm. Estos programas ofrecen interfaces gráficas para gestionar múltiples perfiles de conexión, lo cual es muy útil si administras varios proyectos de forma simultánea.

3. Introducción del comando de conexión especificando el puerto de red

Con la terminal abierta, el comando estándar tiene una sintaxis muy clara: ssh usuario@direccion_ip. Si tu servidor utiliza el puerto 22, no necesitas añadir nada más. El sistema intentará establecer el contacto de forma inmediata y te pedirá confirmación para iniciar el cifrado.

En el caso de que hayas seguido nuestra recomendación de seguridad y utilices un puerto distinto, deberás usar el parámetro -p. El comando quedaría así: ssh -p 2202 usuario@direccion_ip. Es un detalle pequeño pero fundamental, ya que sin especificar el puerto correcto, el servidor simplemente ignorará tu petición de entrada por no estar escuchando en el canal esperado.

4. Aceptación de la huella digital del servidor en el primer acceso

La primera vez que conectas a un servidor nuevo, SSH te mostrará un mensaje de advertencia. Te indicará que la autenticidad del host no puede ser establecida y te mostrará una cadena de caracteres llamada «fingerprint». Este es un mecanismo de seguridad vital que te pregunta: «¿Estás seguro de que este es el servidor que buscas?».

Si es la primera vez que instalas el servidor, lo normal es escribir yes para aceptar. A partir de ese momento, tu ordenador recordará esa huella. Si en el futuro intentas conectar y la huella ha cambiado, SSH te avisará con un mensaje de alerta roja, indicando que alguien podría estar interceptando tu conexión o que el servidor ha sido reinstalado sin previo aviso.

5. Autenticación mediante contraseña o validación de llave criptográfica

El último paso es demostrar quién eres. Si utilizas el método tradicional, el servidor te pedirá tu contraseña. Debes tener en cuenta que, por seguridad, los caracteres que escribas no aparecerán en pantalla (ni siquiera asteriscos), así que escribe con cuidado y pulsa Enter. Es una medida clásica de los sistemas Unix para evitar que alguien vea la longitud de tu clave por encima de tu hombro.

Si ya eres un usuario avanzado y has configurado llaves SSH, este proceso será mucho más rápido. Tu cliente local enviará un reto firmado digitalmente y el servidor te dejará pasar de forma instantánea sin pedirte ninguna palabra clave. Es el método que recomendamos por su comodidad y, sobre todo, por su resistencia frente a ataques de fuerza bruta.

Comandos básicos de SSH

Una vez dentro, la terminal es tu lienzo. Estos son los comandos fundamentales para manejarte con soltura en el día a día.

Comando para iniciar una conexión básica con un usuario específico

El uso más frecuente se resume en la sintaxis ssh nombre_usuario@servidor.com. Al especificar el usuario delante de la dirección, le indicamos al servidor con qué perfil queremos trabajar. Esto es esencial porque cada usuario tiene sus propios permisos y archivos dentro del sistema remoto, permitiendo una gestión organizada de los recursos.

Si omites el nombre de usuario y simplemente escribes ssh servidor.com, el protocolo intentará conectar usando el mismo nombre de usuario que tienes en tu PC local. Como esto rara vez coincide con el usuario del servidor, acostumbrarse a escribir la sintaxis completa es una buena práctica que evita confusiones y errores de acceso denegado.

Uso del parámetro -p para conectar a través de puertos no estándar

Como hemos mencionado, la seguridad por oscuridad mediante el cambio de puerto es común. Para conectar en estos casos, el parámetro -p (en minúscula) es obligatorio. Por ejemplo, ssh -p 443 usuario@servidor podría usarse si el administrador ha configurado SSH para usar el puerto de HTTPS con el fin de saltar restricciones de redes muy capadas.

Es importante no confundir este parámetro con el -P (mayúscula) que se utiliza en el comando SCP. Mantener clara la distinción entre mayúsculas y minúsculas es una constante en el mundo Linux y SSH. Dominar estos pequeños detalles de sintaxis te permitirá moverte entre diferentes infraestructuras con la agilidad de un experto.

Ejecución de comandos individuales sin abrir una sesión interactiva

A veces solo necesitas consultar un dato rápido sin querer entrar y salir del servidor. SSH permite pasar un comando entre comillas al final de la línea de conexión: ssh usuario@servidor ‘uptime’. El sistema conectará, ejecutará el comando, te mostrará el resultado en tu pantalla local y cerrará la sesión automáticamente.

Esta función es la base de la automatización avanzada. Imagina que quieres reiniciar un servicio en diez servidores distintos; podrías crear un pequeño script que recorra una lista de IPs y ejecute el comando de reinicio vía SSH en segundos. Es una forma increíblemente potente de gestionar flotas de servidores sin perder tiempo en procesos manuales de login.

Copia de archivos del equipo local al servidor remoto mediante SCP

El comando SCP utiliza el protocolo SSH para realizar transferencias de archivos de forma segura y directa. Su uso es muy intuitivo: scp archivo_local.txt usuario@servidor:/carpeta/destino/. Funciona de forma muy similar al comando cp de Linux, pero permitiendo que el destino sea una máquina a miles de kilómetros de distancia.

Si lo que necesitas es descargar un archivo desde el servidor a tu ordenador, simplemente inviertes el orden: scp usuario@servidor:/ruta/archivo_remoto.txt ./. Al viajar dentro del túnel cifrado, tienes la tranquilidad de que tus documentos, bases de datos o códigos fuente están protegidos durante todo el tránsito, manteniendo la confidencialidad de tu propiedad intelectual.

Cierre seguro de la sesión de terminal para finalizar el proceso

Terminar una sesión de forma correcta es tan importante como iniciarla. Aunque podrías simplemente cerrar la ventana de la terminal, lo más profesional es escribir exit o logout. Esto asegura que el servidor cierre el proceso de forma limpia, libere los recursos de memoria asociados a tu sesión y registre tu desconexión en los logs de auditoría.

Cerrar la sesión manualmente también te protege de posibles descuidos. Si dejas una terminal abierta en un portátil y alguien accede a él, tendría acceso total a tu servidor remoto. Acostumbrarse a escribir exit cada vez que terminas una tarea es un hábito de higiene digital que separa a los aficionados de los profesionales de la administración de sistemas.

Seguridad avanzada y buenas prácticas en SSH

Llevar la seguridad de tu servidor al siguiente nivel requiere ir un paso más allá de la configuración por defecto.

Desactivar el acceso root para prevenir ataques de fuerza bruta

El usuario root es el objetivo número uno de cualquier atacante, ya que posee el control absoluto del sistema. Una de las configuraciones más recomendadas es editar el archivo /etc/ssh/sshd_config y establecer la opción PermitRootLogin no. De esta forma, obligas a cualquier persona a entrar primero con un usuario normal y corriente, dificultando enormemente el trabajo de los hackers.

Una vez dentro con tu usuario normal, puedes escalar privilegios usando el comando sudo si necesitas realizar tareas administrativas. Este enfoque añade una capa extra de seguridad: el atacante no solo tendría que adivinar tu nombre de usuario personalizado, sino también tu contraseña de usuario y, posteriormente, la contraseña de administrador. Es una barrera doble que protege el corazón de tu servidor de forma muy efectiva.

Implementación de la autenticación de dos factores (2FA) en SSH

Incluso si alguien consiguiera robar tu contraseña o tu llave privada, puedes detener el ataque implementando un segundo factor de autenticación. Al igual que haces con tu banco o tu correo, puedes configurar el servidor para que pida un código temporal generado en tu móvil (TOTP) tras introducir la contraseña. Es una de las mejoras de seguridad más potentes que puedes aplicar hoy en día. Herramientas como el módulo PAM de Google Authenticator permiten integrar esta funcionalidad en Linux de forma sencilla. Al activar el 2FA, conviertes tu servidor en una fortaleza inexpugnable ante robos de credenciales tradicionales.

Uso de Fail2Ban para bloquear intentos de acceso fallidos

Fail2Ban es un servicio esencial que vigila los archivos de registro de tu servidor en tiempo real. Si detecta que una dirección IP específica está fallando repetidamente en el inicio de sesión (un signo claro de un ataque de fuerza bruta), Fail2Ban actualiza las reglas del firewall para bloquear esa IP durante un tiempo determinado. Es un sistema de defensa activa que «castiga» el comportamiento malicioso de forma automática.

Configurar Fail2Ban te da una tranquilidad inmensa, ya que el servidor se defiende solo mientras tú duermes. Puedes establecer cuántos intentos permites antes del baneo y cuánto tiempo durará el bloqueo. Esta herramienta es fundamental para mantener los logs limpios y asegurar que los recursos de CPU del servidor no se desperdicien procesando miles de peticiones de atacantes frustrados.

Productos relacionados: