Qué es SSH

SSH, o Secure Shell, es un protocolo de administración remota que permite a los usuarios controlar y modificar sus servidores remotos a través de Internet. El servicio fue creado como un reemplazo seguro para el Telnet no encriptado y utiliza técnicas criptográficas para asegurar que toda la comunicación hacia y desde el servidor remoto ocurra de manera encriptada. Proporciona un mecanismo para autenticar a un usuario remoto, transfiriendo las entradas del cliente al host, y retransmitiendo la salida de vuelta al cliente.

La siguiente figura muestra una típica ventana SSH. Cualquier usuario de Linux o macOS puede SSH en su servidor remoto directamente desde la ventana de terminal. Los usuarios de Windows pueden aprovechar los clientes SSH como Putty. Puede ejecutar comandos de shell de la misma manera que lo haría si estuviera operando físicamente el equipo remoto.

Este tutorial de SSH cubrirá los fundamentos de cómo funciona ssh, junto con las tecnologías subyacentes utilizadas por el protocolo para ofrecer un método seguro de acceso remoto. Cubrirá las diferentes capas y tipos de encriptación utilizados, junto con el propósito de cada capa.

Obtenga su alojamiento VPS Linux con Hostinger. Obtenga hasta un 77% de descuento!

Comienza aquí

Cómo funciona SSH

Si usas Linux o Mac, entonces usar SSH es muy sencillo. Si usas Windows, necesitarás utilizar un cliente SSH para abrir conexiones SSH. El cliente SSH más popular es PuTTY, sobre el que puede obtener más información aquí.

Para los usuarios de Mac y Linux, diríjase a su programa de terminal y siga el procedimiento que se indica a continuación:

El comando SSH consta de 3 partes distintas:

ssh {user}@{host}

El comando SSH key indica a su sistema que desea abrir una conexión Secure Shell cifrada. {usuario} representa la cuenta a la que quieres acceder. Por ejemplo, puede querer acceder al usuario root, que es básicamente sinónimo de administrador del sistema con derechos completos para modificar cualquier cosa en el sistema. {host} se refiere al ordenador al que quieres acceder. Puede ser una dirección IP (por ejemplo, 244.235.23.19) o un nombre de dominio (por ejemplo, www.xyzdomain.com).

Cuando pulse Intro, se le pedirá que introduzca la contraseña de la cuenta solicitada. Cuando la escriba, no aparecerá nada en la pantalla, pero su contraseña está siendo transmitida. Una vez que haya terminado de escribirla, vuelva a pulsar Intro. Si tu contraseña es correcta, serás recibido con una ventana de terminal remota.

Si quieres aprender más comandos SSH, descúbrelos aquí.

Entendiendo las diferentes técnicas de encriptación

La ventaja significativa que ofrece SSH sobre sus predecesores es el uso de la encriptación para asegurar la transferencia segura de información entre el host y el cliente. El host se refiere al servidor remoto al que se intenta acceder, mientras que el cliente es el ordenador que se utiliza para acceder al host. Hay tres tecnologías de encriptación diferentes utilizadas por SSH:

  1. Encriptación simétrica
  2. Encriptación asimétrica
  3. Hashing.
    1. Encriptación simétrica

      La encriptación simétrica es una forma de encriptación en la que se utiliza una clave secreta tanto para la encriptación como para la desencriptación de un mensaje por parte del cliente y del host. En efecto, cualquiera que posea la clave puede descifrar el mensaje que se transfiere.

      El cifrado simétrico suele denominarse cifrado de clave compartida o secreto compartido. Por lo general, sólo se utiliza una clave, o a veces un par de claves en las que una clave puede calcularse fácilmente utilizando la otra.

      Las claves simétricas se utilizan para cifrar toda la comunicación durante una sesión SSH. Tanto el cliente como el servidor obtienen la clave secreta utilizando un método acordado, y la clave resultante nunca se revela a ningún tercero. El proceso de creación de una clave simétrica se lleva a cabo mediante un algoritmo de intercambio de claves. Lo que hace que este algoritmo sea especialmente seguro es el hecho de que la clave nunca se transmite entre el cliente y el host. En su lugar, los dos ordenadores comparten los datos públicos y luego los manipulan para calcular la clave secreta de forma independiente. Incluso si otra máquina captura los datos compartidos públicamente, no podrá calcular la clave porque no se conoce el algoritmo de intercambio de claves.

      Hay que tener en cuenta, sin embargo, que la clave secreta es específica para cada sesión SSH, y se genera antes de la autenticación del cliente. Una vez generada la clave, todos los paquetes que se mueven entre las dos máquinas deben ser cifrados por la clave privada. Esto incluye la contraseña tecleada en la consola por el usuario, por lo que las credenciales están siempre protegidas de los olfateadores de paquetes de red.

      Existe una variedad de cifrados simétricos, incluyendo, pero no limitado a, AES (Advanced Encryption Standard), CAST128, Blowfish, etc. Antes de establecer una conexión segura, el cliente y el host deciden qué cifrado utilizar, publicando una lista de cifrados admitidos por orden de preferencia. El cifrado más preferido de los cifrados soportados por el cliente que está presente en la lista del host se utiliza como el cifrado bidireccional.

      Por ejemplo, si dos máquinas Ubuntu 14.04 LTS se comunican entre sí a través de SSH, utilizarán aes128-ctr como su cifrado por defecto.

      Cifrado asimétrico

      A diferencia del cifrado simétrico, el cifrado asimétrico utiliza dos claves separadas para el cifrado y el descifrado. Estas dos claves se conocen como la clave pública y la clave privada. Juntas, ambas claves forman un par de claves públicas y privadas.

      La clave pública, como su nombre indica, se distribuye abiertamente y se comparte con todas las partes. Aunque está estrechamente relacionada con la clave privada en términos de funcionalidad, la clave privada no puede ser calculada matemáticamente a partir de la clave pública. La relación entre las dos claves es muy compleja: un mensaje cifrado por la clave pública de una máquina, sólo puede ser descifrado por la clave privada de la misma máquina. Esta relación unidireccional significa que la clave pública no puede descifrar sus propios mensajes, ni puede descifrar nada cifrado por la clave privada.

      La clave privada debe permanecer privada, es decir, para que la conexión sea segura, ningún tercero debe conocerla. La fuerza de toda la conexión reside en el hecho de que la clave privada nunca se revela, ya que es el único componente capaz de descifrar los mensajes que fueron encriptados con su propia clave pública. Por lo tanto, cualquier parte con capacidad para descifrar mensajes firmados públicamente debe poseer la clave privada correspondiente.

      A diferencia de la percepción general, el cifrado asimétrico no se utiliza para cifrar toda la sesión SSH. En cambio, sólo se utiliza durante el algoritmo de intercambio de claves del cifrado simétrico. Antes de iniciar una conexión segura, ambas partes generan pares temporales de claves públicas y privadas, y comparten sus respectivas claves privadas para producir la clave secreta compartida.

      Una vez que se ha establecido una comunicación simétrica segura, el servidor utiliza la clave pública del cliente para generar y desafiar y transmitirla al cliente para su autenticación. Si el cliente puede descifrar con éxito el mensaje, significa que posee la clave privada necesaria para la conexión. La sesión SSH comienza entonces.

      Hashing

      El hashing unidireccional es otra forma de criptografía utilizada en las conexiones Secure Shell. Las funciones de hash unidireccional difieren de las dos formas de cifrado anteriores en el sentido de que nunca están destinadas a ser descifradas. Generan un valor único de una longitud fija para cada entrada que no muestra ninguna tendencia clara que pueda ser explotada. Esto los hace prácticamente imposibles de revertir.

      Es fácil generar un hash criptográfico a partir de una entrada dada, pero es imposible generar la entrada a partir del hash. Esto significa que si un cliente posee la entrada correcta, puede generar el hash criptográfico y comparar su valor para verificar si posee la entrada correcta.

      SSH utiliza hashes para verificar la autenticidad de los mensajes. Para ello se utilizan los HMAC, o Códigos de Autenticación de Mensajes basados en Hash. Esto garantiza que el comando recibido no ha sido manipulado de ninguna manera.

      Mientras se selecciona el algoritmo de cifrado simétrico, también se selecciona un algoritmo de autenticación de mensajes adecuado. Esto funciona de manera similar a cómo se selecciona el cifrado, como se explica en la sección de cifrado simétrico.

      Cada mensaje que se transmite debe contener una MAC, que se calcula utilizando la clave simétrica, el número de secuencia del paquete y el contenido del mensaje. Se envía fuera de los datos cifrados simétricamente como la sección final del paquete de comunicación.

      Cómo funciona SSH con estas técnicas de cifrado

      La forma en que SSH funciona es haciendo uso de un modelo cliente-servidor para permitir la autenticación de dos sistemas remotos y el cifrado de los datos que pasan entre ellos.

      SSH opera en el puerto TCP 22 por defecto (aunque esto se puede cambiar si es necesario). El host (servidor) escucha en el puerto 22 (o en cualquier otro puerto asignado a SSH) las conexiones entrantes. Organiza la conexión segura autenticando al cliente y abriendo el entorno de shell correcto si la verificación tiene éxito.

      El cliente debe comenzar la conexión SSH iniciando el handshake TCP con el servidor, asegurando una conexión simétrica segura, verificando si la identidad mostrada por el servidor coincide con los registros anteriores (normalmente registrados en un archivo de almacenamiento de claves RSA), y presentando las credenciales de usuario requeridas para autenticar la conexión.

      Hay dos etapas para establecer una conexión: en primer lugar, ambos sistemas deben acordar los estándares de encriptación para proteger las futuras comunicaciones y, en segundo lugar, el usuario debe autenticarse. Si las credenciales coinciden, entonces se le concede el acceso al usuario.

      Negociación del cifrado de la sesión

      Cuando un cliente intenta conectarse al servidor a través de TCP, el servidor presenta los protocolos de cifrado y las respectivas versiones que soporta. Si el cliente tiene un par de protocolos y versiones similares, se llega a un acuerdo y se inicia la conexión con el protocolo aceptado. El servidor también utiliza una clave pública asimétrica que el cliente puede utilizar para verificar la autenticidad del host.

      Una vez establecido esto, las dos partes utilizan lo que se conoce como algoritmo de intercambio de claves Diffie-Hellman para crear una clave simétrica. Este algoritmo permite que tanto el cliente como el servidor lleguen a una clave de cifrado compartida que se utilizará en lo sucesivo para cifrar toda la sesión de comunicación.

      Así es como funciona el algoritmo a un nivel muy básico:

      1. Tanto el cliente como el servidor se ponen de acuerdo en un número primo muy grande, que por supuesto no tiene ningún factor en común. Este valor de número primo también se conoce como valor semilla.
      2. A continuación, las dos partes acuerdan un mecanismo de cifrado común para generar otro conjunto de valores manipulando los valores semilla de una manera algorítmica específica. Estos mecanismos, también conocidos como generadores de cifrado, realizan grandes operaciones sobre la semilla. Un ejemplo de este tipo de generador es el AES (Advanced Encryption Standard).
      3. Ambas partes generan independientemente otro número primo. Éste se utiliza como clave privada secreta para la interacción.
      4. Esta clave privada recién generada, con el número compartido y el algoritmo de cifrado (por ejemplo, AES), se utiliza para calcular una clave pública que se distribuye al otro ordenador.
      5. Las partes utilizan entonces su clave privada personal, la clave pública compartida de la otra máquina y el número primo original para crear una clave compartida final. Esta clave es calculada de forma independiente por ambos ordenadores, pero creará la misma clave de cifrado en ambos lados.
      6. Ahora que ambas partes tienen una clave compartida, pueden cifrar simétricamente toda la sesión SSH. Se puede utilizar la misma clave para cifrar y descifrar los mensajes (leer: sección sobre cifrado simétrico).
      7. Ahora que se ha establecido la sesión segura de cifrado simétrico, se debe autenticar al usuario.

        Autenticación del usuario

        La etapa final antes de conceder al usuario el acceso al servidor es autenticar sus credenciales. Para ello, la mayoría de los usuarios de SSH utilizan una contraseña. Se le pide al usuario que introduzca el nombre de usuario, seguido de la contraseña. Estas credenciales pasan de forma segura a través del túnel cifrado simétricamente, por lo que no hay posibilidad de que sean capturadas por un tercero.

        Aunque las contraseñas están cifradas, todavía no se recomienda usar contraseñas para las conexiones seguras. Esto se debe a que muchos bots pueden simplemente hacer fuerza bruta con contraseñas fáciles o predeterminadas y obtener acceso a su cuenta. En su lugar, la alternativa recomendada son los Pares de Claves SSH.

        Son un conjunto de claves asimétricas que se utilizan para autenticar al usuario sin necesidad de introducir ninguna contraseña.

        Conclusión

        Entender en profundidad el funcionamiento subyacente de SSH puede ayudar a los usuarios a entender los aspectos de seguridad de esta tecnología. La mayoría de la gente considera que este proceso es extremadamente complejo e incomprensible, pero es mucho más sencillo de lo que la mayoría de la gente piensa. Si te preguntas cuánto tarda un ordenador en calcular un hash y autentificar a un usuario, pues bien, esto ocurre en menos de un segundo. De hecho, la máxima cantidad de tiempo se gasta en la transferencia de datos a través de Internet.

        Con suerte, este tutorial de SSH te ha ayudado a ver la forma en que las diferentes tecnologías pueden ser agrupadas para crear un sistema robusto en el que cada mecanismo tiene un papel muy importante que desempeñar. Además, ahora sabes por qué Telnet se convirtió en una cosa del pasado tan pronto como apareció SSH.

        Para más tutoriales de Linux, asegúrese de revisar nuestra sección de tutoriales VPS.

        Este post fue modificado por última vez el junio 16, 2020 4:37 am

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *