GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo funciona SSH?

Introducción

La transmisión de datos entre dispositivos en una red debe regularse para que los dispositivos se comuniquen correctamente. La transmisión se realiza con un conjunto de reglas conocido como protocolo de red.

Los primeros protocolos de red como Telnet y rsh no brindaban suficiente protección contra ataques cibernéticos maliciosos. La necesidad de un método de comunicación de red más seguro inspiró la creación del protocolo SSH.

En este tutorial, hablaremos sobre qué es SSH, por qué se usa y cómo funciona.

¿Qué es SSH?

SSH (abreviatura de Secure Shell) es un protocolo de red que proporciona una forma segura para que dos computadoras se conecten de forma remota. SSH emplea cifrado para garantizar que los piratas informáticos no puedan interpretar el tráfico entre dos dispositivos conectados.

SSH consta de tres capas distintas:

  • La capa de transporte establece una comunicación segura entre un cliente y un servidor durante y después de la autenticación. Supervisa el cifrado de datos, el descifrado y la protección de la integridad. Además, ayuda a acelerar el intercambio de datos al proporcionar compresión y almacenamiento en caché.
  • La capa de autenticación comunica los métodos de autenticación admitidos al cliente. También lleva a cabo todo el proceso de autenticación del usuario.
  • La capa de conexión administra la comunicación entre las máquinas después de que la autenticación sea exitosa. Maneja la apertura y cierre de canales de comunicación y permite múltiples canales para múltiples sesiones.

¿Para qué se utiliza SSH?

SSH proporciona una capa de seguridad para la transferencia de información entre máquinas. Algunos casos de uso importantes para SSH son:

  • Acceso remoto:SSH garantiza conexiones remotas cifradas para usuarios y procesos.
  • Transferencias de archivos – SFTP, un protocolo seguro de transferencia de archivos administrado por SSH, proporciona una forma segura de manipular archivos a través de una red.
  • Reenvío X11 – Los usuarios pueden ejecutar aplicaciones X alojadas en el servidor desde sus máquinas cliente.
  • Reenvío de puertos:al asignar el puerto de un cliente a los puertos remotos del servidor, SSH ayuda a proteger otros protocolos de red, como TCP/IP.
  • Túneles – Esta técnica de encapsulación proporciona transferencias de datos seguras. La tunelización es útil para acceder a materiales en línea confidenciales para empresas desde redes no seguras, ya que puede actuar como una práctica alternativa de VPN.
  • Administración de redes – El protocolo SSH administra la infraestructura de la red y otras partes del sistema.

¿Cómo funciona SSH?

SSH es un protocolo basado en cliente-servidor. Esto significa que el protocolo permite que un dispositivo que solicita información o servicios (el cliente) se conecte a otro dispositivo (el servidor).

Cuando un cliente se conecta a un servidor a través de SSH, la máquina se puede controlar como una computadora local.

El servidor tiene un puerto TCP designado sobre el cual monitorea la red, esperando que los clientes inicialicen la conexión. Antes de que un cliente se conecte y comience a emitir comandos SSH, debe pasar el proceso de autenticación.

Establecimiento de una conexión SSH

Ejecute el siguiente comando en una máquina cliente para iniciar una conexión SSH:

ssh [username]@[server_ip_or_hostname]

Cuando el servidor recibe las solicitudes, comienza una negociación de cifrado de sesión.

Negociación de cifrado de sesión

Al recibir una solicitud de conexión, el servidor envía al cliente un conjunto de protocolos de cifrado admitidos. El servidor utiliza la clave pública como método de autenticación.

El cliente compara los protocolos con su propio conjunto. Si hay protocolos coincidentes, las máquinas aceptan usar uno para establecer la conexión.

El cliente compara la clave pública del servidor con la clave privada almacenada en su sistema en el primer intento de conexión. Si las claves coinciden, el cliente y el servidor acuerdan usar cifrado simétrico para comunicarse durante la sesión SSH. Para ello, se comunican mediante un proceso de cifrado asimétrico que emplea el algoritmo de intercambio de claves Diffie-Hellman (DH).

El algoritmo DH permite que las máquinas trabajen juntas y creen de forma segura una clave criptográfica en una red pública. Para generar una clave, las máquinas realizan los siguientes pasos:

  • Las máquinas concuerdan en dos números :un módulo y un número base. Para evitar el descifrado de claves por fuerza bruta, el módulo elegido es un número primo de al menos 600 dígitos.
  • Las máquinas eligen por separado un número y aplicarlo a la ecuación que involucra los dos números públicos.
  • El servidor y el cliente intercambian los valores calculados .
  • Cada máquina ahora realiza un cálculo usando el resultado recibido del otro.

Al realizar los pasos anteriores, ambas máquinas calculan el mismo valor, su clave secreta. Finalmente, el servidor intenta autenticar al usuario que solicita acceso.

Autenticación de usuario

Los dos métodos de autenticación de usuario SSH más comunes que se utilizan son las contraseñas y las claves SSH. Los clientes envían de forma segura contraseñas cifradas al servidor. Sin embargo, las contraseñas son un método de autenticación riesgoso porque su fortaleza depende de la conciencia del usuario de lo que hace que una contraseña sea segura.

Los pares de claves públicas y privadas SSH cifradas asimétricamente son una mejor opción. Una vez que el cliente descifra el mensaje, el servidor otorga al cliente acceso al sistema.

Para generar un par de claves SSH, escriba ssh-keygen en la terminal Como resultado, el sistema genera y almacena las claves.

Para obtener más información sobre este proceso, consulte Cómo generar claves SSH en Ubuntu (el proceso es esencialmente el mismo en todas las distribuciones de Linux y Mac OS).

Explicación de las tecnologías de cifrado SSH

SSH utiliza tres tipos de cifrado de datos durante la comunicación entre las máquinas. Estos son:

  • Cifrado simétrico
  • Cifrado asimétrico
  • Hashing.

Cifrado simétrico

El cifrado simétrico genera una única clave que intercambian dos máquinas. Luego, las máquinas usan la clave tanto para el cifrado como para el descifrado. Este método es rápido, no consume muchos recursos y SSH lo usa para cada sesión.

Cada vez que el cliente y el servidor negocian qué algoritmo usar para una sesión SSH, siempre eligen el primer algoritmo en la lista del cliente que admite el servidor.

Cifrado asimétrico

Los datos se cifran asimétricamente cuando las máquinas utilizan dos claves diferentes pero matemáticamente relacionadas, pública y privada, para realizar el cifrado. La máquina cliente que participó en la configuración del cifrado puede descifrar la información utilizando la clave privada.

SSH usa claves asimétricas temporales para intercambiar claves simétricas, como durante el proceso de autenticación del usuario.

Hashing

SSH usa hashing para validar si los paquetes de datos provienen de la fuente de la que parecen provenir. Los algoritmos hash utilizados para producir hashes en SSH son el código de autenticación de mensajes (MAC) y el código de autenticación de mensajes hash (HMAC).

Un algoritmo hash utiliza un paquete de datos para crear una cadena hash única. La máquina que envía el paquete siempre envía el paquete junto con el valor hash.

La máquina receptora conoce el algoritmo utilizado para crear el hash y puede aplicarlo a los datos. El propósito es ver si el valor hash calculado será el mismo. Si el valor hash obtenido difiere del hash del remitente, los datos se corrompieron durante la transferencia.


Ubuntu
  1. ¿Cómo funciona Awk '!a[$0]++'?

  2. ¿Cómo funciona Rm? ¿Qué hace Rm?

  3. ¿Cómo funciona realmente sig_atomic_t?

  4. ¿Cómo funciona el comando ps?

  5. ¿Cómo funciona la interfaz de bucle invertido?

¿Qué es el DNS inverso y cómo funciona?

¿Cómo funciona SFTP?

Ssh:¿cómo funciona el túnel Ssh inverso?

¿Qué es Docker? ¿Como funciona?

¿Cómo funciona el intercambio de memoria en Linux?

¿Cómo funciona la pantalla de Linux?