¿Cómo funciona el SSH?

El SSH o Secure Shell es un protocolo de administración remota por el cual se permite, a través de Internet y un mecanismo de autenticación, controlar y modificar los servidores remotos a sus usuarios.

Básicamente, garantiza un mecanismo de autenticación remoto de los usuarios, permite transferir información desde un cliente al host y enviar la salida otra vez al punto de origen ⏤el cliente⏤. Se puede utilizar con usuarios Linux, MacOS, y Windows.

En la imagen se ve una ventana común de SSH.

En esta nota, se explicarán las funciones básicas del protocolo SSH y las tecnologías que las subyacen y posibilitan el acceso remoto a un servidor.

¿Cómo funciona SSH?

En caso de tener sistemas Linux o Mac, la utilización es sencilla. Si tenés sistema Windows, tendrás que recurrir a un cliente SSH para abrir conexiones de la misma, como por ejemplo PuTTY.

En el caso primero ⏤utilizando Linux o Mac⏤, deberás ir al programa de terminal y seguir el procedimiento a continuación.

El SSH tiene 3 partes:

ssh {user}@{host}

El comando SSH indica que deseás abrir una conexión de Shell Segura y cifrada. El {user} se refiere a la cuenta a la que querés acceder. {host} se refiere a la computadora a la que querés acceder, cosa que puede estar denominado de dos formas: desde una dirección de IP ⏤como por ejemplo “244.235.33.21” ⏤ o un nombre de dominio (www.abcd.com).

Al dar enter, el protocolo requerirá la contraseña del usuario solicitado. Puede que no aparezca en la pantalla, pero continuá escribiéndola que se está transmitiendo, aunque no parezca. Al finalizar de escribir, pulsá enter y ya vas a poder ver la ventana de la terminal.

¿Cómo funciona el protocolo SSH con las distintas técnicas de cifrado?

SSH funciona con el modelo cliente-servidor para autenticar dos sistemas remotos y el cifrado que se utiliza. Si no es reconfigurado, el SSH opera en el puerto TCP 22, cosa fundamental para comparar en el host, que también está activo en el puerto 22 para las informaciones entrantes. De cualquier manera, esto se puede ajustar, pero es importante tenerlo en cuenta. Además, se organiza una conexión segura mediante la autenticación del cliente y se realiza la apertura del shell si la verificación es exitosa.

El cliente, para lograrlo, debe iniciar una conexión SSH a través del protocolo TCP con el host. Se debe asegurar un vínculo seguro, verificando los datos del servidor, la información detallada sobre este, sus registros anteriores ⏤muchas veces guardados como archivos de almacenamiento de claves RSA⏤ y la presentación de credenciales de usuario ⏤que autentican la conexión⏤.

Hay dos momentos de establecimiento de conexión. En primer lugar, los dos sistemas deben coincidir y aceptar los estándares de cifrado para proteger la transmisión de datos. Por otro lado, es requerido que el usuario sea ingresado y autenticado: las credenciales deben coincidir.

Negociación de cifrado de sesión

En el momento que un cliente intenta conectarse a un host por medio de un TCP, el host devuelve los protocolos de cifrado y la información de cuáles versiones acepta. Si el sistema del cliente posee protocolos y versiones similares, se inicia la conexión por esta aceptación de lenguajes.

Cuando se establece esta relación aceptada, los dos sistemas ⏤cliente y host⏤ activan lo que se denomina “Algoritmo de Intercambio de Claves Diffie-Hellman” que crea una relación simétrica entre los dos (distinto a lo que se entable en el paso previo, donde el cliente es asimétrico). Bajo este algoritmo, ambos equipos concuerdan en una clave de cifrado compartida que se va a utilizar en todo el proceso posterior.

El algoritmo trabaja a un nivel poco complejo:

  • En primer lugar, el cliente y el servidor asignan un número primo muy grande que no tenga factor común. Este es el conocido valor semilla o seed value.

  • Posteriormente, el host y el cliente acuerdan un sistema de cifrado para generar otro grupo de números que modifican los valores semilla a partir de un sistema algorítmico específico. Este mecanismo se denomina generador de cifrado, hay muchos, como por ejemplo el AES (Advanced Encryption Standard).

  • En tercer lugar, las dos partes generan un número primo independiente, creando la clave privada para la interacción.

  • En cuarto lugar, se crea una clave pública a partir de la clave privada, el número compartido y el algoritmo de cifrado, y se la comparte con el otro sistema.

  • Luego, los equipos utilizan la clave privada, la clave pública y el número primo del comienzo para establecer una contraseña final y compartida. Esta se relaciona con ambos equipos de forma independiente pero es igual en ambas puntas del proceso.

  • Finalmente, con la clave compartida, los sistemas están posibilitados de cifrar la sesión simétricamente y, también, descifrar.

Autenticación del usuario

Antes de que el cliente pueda acceder al host, se deben autenticar sus credenciales. La mayoría de protocolos SSH utilizan una contraseña para realizar esto. Se la escribe en el sistema, con el nombre de usuario, y se inicia el proceso de forma segura por el cifrado compartido ⏤evitando problemas de seguridad por parte de terceros⏤.

A pesar de que las contraseñas son cifradas, no se recomienda usar claves para conexiones seguras. La razón es simple: muchos equipos pueden descifrar las contraseñas a la fuerza y con ello poseer los datos de autenticación de las credenciales. Este caso sería muy malo, ya que, con dicha información, se tiene el acceso a las cuentas. Es, entonces, más apropiado utilizar un par de claves SSH: un grupo de contraseñas asimétricas que se utilizan para autenticar los usuarios sin requerimiento de introducir datos.

Conocer el SSH o Secure Shell permite dominar mejor ese protocolo de administración remota. SSH brinda tranquilidad y eficacia.

Last updated