Volver al blog

Descripción general de SSH – Servidores, clientes y claves SSH

Descripción general de SSH – Servidores, clientes y claves SSH

Cuando se trata de computación remota, SSH es uno de los protocolos más populares y seguros. SSH es un protocolo de red criptográfico que establece una conexión segura con dispositivos remotos. Al conectarse a un dispositivo remoto, el usuario puede ejecutar comandos en la shell remota. SSH es más común entre administradores de redes y sistemas.

Esta guía estilo hoja de trucos muestra una descripción general de SSH, algunas formas comunes de conectarse con SSH y varias configuraciones de SSH.

Descripción general de SSH

SSH es el acrónimo de Secure Shell. Algunos también se refieren a SSH como Secure Socket Shell. SSH es la forma más común de acceder a un servidor remoto. Al conectarse a un sistema remoto mediante SSH, se conecta a una cuenta existente. Una vez conectado, tendrá acceso a una sesión de shell. Todos los comandos ejecutados se realizarán en la máquina remota y la salida se mostrará en su terminal local.

La conexión SSH sigue un modelo cliente-servidor. El sistema remoto debe estar ejecutando el demonio SSH para aceptar conexiones SSH remotas. El demonio SSH escucha en puertos específicos, autentica las solicitudes de conexión y genera el entorno adecuado cuando se cumplen las condiciones.

Para esta guía, hemos configurado dos servidores Ubuntu. El servidor primario se configurará para conectarse al servidor secundario. El servidor secundario se configurará para aceptar conexiones SSH desde el servidor primario. Estas direcciones IP de servidor se utilizarán a lo largo de la guía:

  • Primario: 31.171.250.121

  • Secundario: 31.171.250.130

Para empezar, puede echar un vistazo a nuestras guías detalladas sobre cómo usar SSH para conectarse a un servidor remoto en Ubuntu y cómo configurar su servidor Linux para usar la autenticación basada en claves SSH. ¡Ahora, empecemos!

Autenticación SSH

Existen dos tipos principales de autenticación SSH. El método tradicional consiste en utilizar una contraseña. Es menos seguro y no se recomienda en absoluto. El segundo método son las claves SSH. Las claves SSH ofrecen una seguridad muy sólida y son muy recomendadas.

Aunque la autenticación por contraseña es más sencilla de entender y configurar, es fácil de explotar. Por ejemplo, los bots automatizados pueden usar la fuerza bruta para entrar en un sistema. Las claves SSH son claves criptográficas. Cada clave tiene dos partes – una clave privada y una clave pública. La clave pública se puede compartir en cualquier lugar sin ninguna preocupación. Sin embargo, la clave privada debe permanecer protegida.

Para utilizar las claves SSH como método de autenticación, el sistema remoto debe tener instalada una copia de la clave pública. También se deben instalar copias de las claves privada y pública en el sistema local. Por defecto, las claves públicas se listan en el siguiente archivo. Cada usuario único tiene una copia única de este archivo:

Así es como funciona el proceso de autenticación:

  • El sistema cliente envía una solicitud de conexión al sistema remoto. También envía qué clave SSH utilizar.

  • El sistema remoto comprueba si la clave pública está listada en authorized_keys.

  • Si la clave existe, se genera una cadena aleatoria y se cifra utilizando la clave pública. El mensaje cifrado solo se puede descifrar utilizando la clave privada.

  • Al recibir la cadena, el cliente la descifrará.

  • Combinando la cadena y el ID de sesión negociado previamente, se genera un hash MD5. El cliente envía el hash MD5 al sistema remoto.

  • El sistema remoto conoce la cadena aleatoria y el ID de sesión. Si el hash MD5 coincide, se permite la conexión.

Claves SSH

En esta guía, la clave SSH será el foco principal de la autenticación. Por lo tanto, esta sección se centrará en cómo trabajar con claves SSH.

  • Generar un par de claves SSH

Por defecto, un sistema Linux no tiene una clave SSH instalada. Sin embargo, el sistema puede contener claves SSH generadas o instaladas previamente. Suponiendo que no haya ninguna clave SSH previa, necesitamos generar un nuevo par de claves SSH pública y privada. SSH admite muchos algoritmos criptográficos para generar claves SSH, por ejemplo, RSA, DSA, ECDSA y EdDSA. RSA es el algoritmo predeterminado y preferido.

  • Generar un par de claves RSA normal

Para generar un par de claves SSH, ejecute el siguiente comando:

SSH Keygen

El sistema le preguntará dónde almacenar el par de claves. Como se mencionó, será un par de claves RSA. Si no se introduce ningún valor, SSH lo guardará en la ubicación predeterminada /home/demo/.ssh/id_rsa.

El siguiente paso es introducir una frase de contraseña. Se recomienda utilizar una frase de contraseña. La longitud de la frase de contraseña es arbitraria. Añade una capa de seguridad. Sin embargo, SSH permite generar claves sin ninguna frase de contraseña. Simplemente presione Enter si desea claves sin frase de contraseña.

La salida final proporciona la siguiente información de la clave:

  1. La ubicación de la clave privada ( /root/.ssh/id_rsa). Nunca debe compartirse.

  2. La ubicación de la clave pública ( /root/.ssh/id_rsa.pub). Es seguro compartirla con cualquiera.

  3. La huella digital de la clave.

  4. Una imagen aleatoria de la clave. La idea es que, si hay una vulneración de las claves, probablemente pueda notarlo al observar cualquier cambio en la imagen de la clave.

  • Generar un par de claves RSA con diferentes bits

Por defecto, las claves SSH son de 2048 bits. Por seguridad, se considera que es suficiente. Sin embargo, podemos especificar manualmente el uso de un número diferente de bits. Cuanto mayor sea el valor de bits, más fuerte será la clave.

Ejecute el siguiente comando para generar un par de claves SSH de 4096 bits. La mayoría de los servidores admiten claves SSH de 4096 bits. Si la clave es demasiado grande, es posible que no se acepte por motivos de protección contra DDoS:

SSH Keygen with bitsDebido a que ya habíamos generado un par de claves, SSH preguntará si desea sobrescribir el anterior. El resto del proceso es el mismo que para generar un par de claves normal.

  • Cambiar la frase de contraseña de la clave privada

Podemos cambiar la frase de contraseña de la clave privada. El proceso requiere que conozca la frase de contraseña actual. Para cambiar la frase de contraseña, ejecute el siguiente comando:

SSH Keygen Password Change

El comando le pedirá que introduzca la ubicación de la clave privada. Presione Enter si la clave está almacenada en la ubicación predeterminada. Introduzca la frase de contraseña actual. Si se acepta, podrá designar una nueva.

  • Mostrar la huella digital de una clave SSH

Cada par de claves SSH comparte una huella digital criptográfica. Esta huella digital se puede utilizar para identificar claves únicas. Puede ser útil en numerosas situaciones. Ejecute el siguiente comando para comprobar la huella digital de una clave SSH:

SSH Key Fingerprint

Introduzca la ubicación de la clave. Presione Enter si la clave está almacenada en la ubicación predeterminada.

Copiar la clave pública

El par de claves SSH está listo para asegurar conexiones remotas. Para que el sistema remoto acepte la clave SSH para la autenticación, necesita tener una copia de la clave pública. Existen múltiples formas de realizar una copia de la clave pública en el servidor remoto.

  • Uso de ssh-copy-id

El ssh-copy-id viene como parte del paquete OpenSSH. Es la forma predeterminada de copiar la clave pública SSH. Es simple y fácil de usar. Ejecute el siguiente comando para transferir una copia de la clave pública:

SSH Copy ID

Necesita la contraseña de la cuenta de usuario remoto para completar el proceso. Si tiene éxito, aparecerá un mensaje de éxito.

  • Uso de la conexión SSH

Si usar la utilidad ssh-copy-id no está disponible pero el servidor principal puede conectarse al servidor secundario usando SSH, entonces podemos usar un truco diferente para copiar la clave. Consiste en canalizar el contenido de la clave pública a través del comando SSH al lado remoto. Tenga en cuenta que si el directorio ~/.ssh no existe en el sistema remoto, es posible que no funcione:

SSH Copy

  • Copiar manualmente

Si una conexión remota no es una opción, el único proceso que queda es agregar manualmente la clave pública al servidor remoto. Primero, obtenga el contenido de la clave pública:

En el servidor remoto, coloque la clave en la ubicación adecuada:

Uso de SSH

Ahora que la clave pública está configurada, estamos listos para usar SSH para conectarnos de forma remota.

  • Conectarse a un sistema remoto

El primer paso es aprender a conectarse al sistema remoto usando SSH. Se asume que tanto el sistema local como el remoto permiten el tráfico SSH. Para conectarse al sistema remoto, escriba lo siguiente:

SSH Login Without User

Para conectarse a un usuario específico en el servidor remoto, use la siguiente estructura en su lugar:

SSH Login with User

Si es la primera vez que se conecta al servidor, SSH puede mostrar una advertencia. Ingrese yes para continuar con la conexión. Si la cuenta remota está protegida por contraseña, tendrá que ingresar la contraseña. Si la clave SSH está protegida por una frase de contraseña, también tendrá que ingresar la frase de contraseña.

  • Conectarse a un puerto diferente

Por defecto, SSH se ejecuta en el puerto 22. El cliente SSH asumirá el valor del puerto por defecto al conectarse al sistema remoto. Sin embargo, si el sistema remoto escucha en un puerto diferente para el tráfico SSH, no funcionará. En tal situación, necesitamos declarar manualmente el número de puerto. Para declarar el puerto específico, use la opción -p :

Declarar manualmente el puerto todo el tiempo es contraproducente. Podemos cambiar el valor del puerto por defecto de forma permanente. Para hacerlo, abra el archivo de configuración de SSH. Si el archivo no existe, el siguiente comando lo creará:

Luego, agregue las siguientes líneas:

  • Ejecutar comandos en el servidor remoto

Ahora que la conexión está establecida, cualquier comando que ejecute en la terminal local se enviará al servidor remoto. Cualquier salida generada se enviará a la terminal local.

Si es un solo comando a ejecutar, podemos ejecutarlo sin realizar un inicio de sesión SSH completo. Simplemente podemos declarar el comando después de la instrucción de conexión SSH:

  • Agregar una clave a un agente SSH

Si la clave SSH tiene una frase de contraseña, cada vez que se conecte al sistema remoto tendrá que ingresar la frase de contraseña. Hacerlo repetidamente es contraproducente. Podemos dejar que un agente SSH se encargue de ello. Es una pequeña utilidad que almacena la clave privada después de haber ingresado la frase de contraseña. La clave privada estará disponible durante la sesión de la terminal. Para iniciar el agente SSH, ejecute el siguiente comando:

SSH Agent

El programa se está ejecutando en segundo plano. Todo lo que necesita es agregar su clave privada al agente. Ejecute el siguiente comando:

SSH Add

Ingrese la frase de contraseña para completar la operación.

  • Reenvío de credenciales SSH

También podemos configurar SSH para conectarse de un servidor a otro sin contraseña. Puede ser bastante eficiente, especialmente cuando se trabaja con numerosos servidores remotos. Para lograrlo, necesitamos reenviar las credenciales SSH. El reenvío de credenciales SSH requiere que el servidor remoto esté configurado para aceptar una conexión desde la máquina o servidor local. Luego, todo lo que necesita es conectarse al primer servidor usando la opción -A . Reenvía sus credenciales a los servidores para la sesión actual:

Configuraciones del servidor remoto

Esta sección contiene algunas de las configuraciones comunes del lado del servidor para ayudarle a mejorar las respuestas del servidor y la seguridad de la conexión.

  • Desactivar la autenticación por contraseña

Si las claves SSH están configuradas y la conexión SSH funciona como se espera, entonces es seguro deshabilitar la autenticación por contraseña. La siguiente configuración dejará de solicitar una contraseña cuando cualquier usuario se conecte a través de SSH. En el servidor remoto, abra el sshd_config archivo con root/sudo privilegios:

A continuación, busque la entrada PasswordAuthentication. Si la línea está comentada, descoméntela. Cambie el valor a no:

Password Authentication Change

Guarde el archivo y cierre el editor. Para que los cambios surtan efecto, reinicie el servicio SSH:

Si el sistema es CentOS/Fedora, use el siguiente comando en su lugar:

  • Cambiar el puerto SSH

Como se mencionó anteriormente, SSH utiliza el puerto 22 para intercambiar tráfico SSH. Sin embargo, según algunos administradores de sistemas, es mejor asignar un puerto diferente para SSH. Puede ayudar contra los bots automatizados que inundan el puerto. Para cambiar el puerto en el que escucha SSH, abra el archivo sshd_config :

Busque la entrada Port. Si está comentada, descoméntela. Luego, cambie el valor a un valor diferente. El valor del puerto es un entero de 16 bits sin signo (0-65535):

SSH Port Change

Guarde el archivo y cierre el editor. Para implementar el cambio, reinicie el demonio SSH:

En CentOS/Fedora, ejecute el siguiente comando en su lugar:

  • Limitación de usuarios

Podemos configurar qué cuentas de usuario pueden conectarse usando SSH. También implica modificar el archivo sshd_config . Abra el archivo con privilegios de sudo/root:

Busque la entrada AllowUsers. Añada los usuarios permitidos:

User Limitation

Guarde el archivo y cierre el editor. Reinicie el demonio SSH para que los cambios surtan efecto:

En CentOS/Fedora, ejecute el siguiente comando en su lugar:

  • Limitación de grupos

De manera similar a la limitación de usuarios, también podemos determinar qué grupo de usuarios puede conectarse al sistema mediante SSH. Abra el archivo sshd_config :

Use la entrada AllowGroups para añadir un grupo de usuarios específico que pueda usar SSH:

Allow User Groups

Guarde el archivo y cierre el editor. Reinicie el demonio SSH para que los cambios surtan efecto:

Para CentOS/Fedora, ejecute el siguiente comando en su lugar:

Tenga en cuenta que si se añade o elimina algún usuario del grupo de usuarios, es necesario reiniciar el demonio SSH. De lo contrario, los cambios de grupo no serán efectivos.

  • Deshabilitar el inicio de sesión como root

Si tiene acceso a un usuario con privilegios de sudo, se recomienda deshabilitar el inicio de sesión como root a través de SSH. Abra el archivo sshd_config :

Cambie el valor de la entrada PermitRootLogin a no:

Disable Root Login

Guarde el archivo y cierre el editor. Reinicie el demonio SSH para que el cambio surta efecto:

En CentOS/Fedora, ejecute el siguiente comando en su lugar:

  • Redirección de pantallas de aplicaciones X

El demonio SSH también puede redirigir la pantalla de las aplicaciones X desde el servidor al cliente. Sin embargo, para que esto funcione, el sistema remoto debe tener configurado un sistema de ventanas X. La función también debe estar habilitada en la configuración de SSH. Abra el archivo de configuración de SSH:

Cambie el valor de la directiva X11Forwarding a yes:

X11 Forwarding

Guarde el archivo y cierre el editor. Reinicie el demonio SSH para que el cambio surta efecto:

En CentOS/Fedora, ejecute el siguiente comando en su lugar:

Configuraciones del cliente

En esta sección, eche un vistazo a algunas de las configuraciones comunes en el cliente SSH.

  • Información de conexión específica del servidor

En el sistema local, podemos definir los detalles específicos de una conexión remota. Toda la información se almacena en el archivo de configuración ubicado en ~/.ssh/config:

Cada bloque de sistema remoto se indica mediante la palabra clave Host seguida de un alias. Todas las directivas específicas del sistema van aquí. Al conectarse al sistema remoto, SSH las aplicará automáticamente. Para obtener una explicación completa y detallada de la configuración, consulte la página de manual:

SSH Manual

La entrada para una conexión remota seguirá la siguiente estructura:

  • Tiempo de espera de la conexión

Es posible que se encuentre desconectado de las sesiones SSH antes de estar listo para realizar cualquier acción. Si el cliente no envía ningún paquete al servidor remoto, después de un tiempo, la conexión expira. Para evitar tales circunstancias, podemos configurar el cliente local para que envíe un paquete de vez en cuando para mantener la conexión activa.

Abra el archivo de configuración local:

Debajo de la entrada de conexión remota, agregue la directiva ServerAliveInterval seguida del intervalo de paquetes en segundos:

Server Alive Interval

Guarde el archivo y cierre el editor.

  • Deshabilitar la comprobación de host

Por defecto, cada vez que se intenta conectar a un nuevo servidor, el cliente SSH informará la huella digital del demonio SSH remoto. Es una función útil para verificar la autenticidad del host. Si un actor malicioso intenta suplantar al host remoto, aparecerá como un nuevo servidor.

Deshabilitar esta función puede ser un gran riesgo de seguridad. Generalmente, se recomienda mantener esta opción activada. En ciertas situaciones, sin embargo, deshabilitar la comprobación de host puede ser conveniente. Abra el archivo de configuración:

Debajo de la sección del host remoto, agregue las siguientes directivas:

Disabling Host Checking

La primera directiva deshabilitará la adición automática de nuevos hosts a la lista de hosts conocidos, almacenada en el archivo known_hosts. La segunda directiva es para no advertir sobre ningún cambio. Guarde el archivo y cierre el editor.

  • Multiplexación de SSH sobre una sola conexión TCP

A veces, establecer una conexión TCP puede requerir bastante tiempo. Si es necesario realizar múltiples conexiones a la misma máquina, la multiplexación es una excelente característica que puede aprovechar. La multiplexación SSH permite utilizar la misma conexión TCP para múltiples sesiones SSH. Ello reduce parte de la carga de trabajo requerida para establecer nuevas sesiones. Limitar el número de conexiones también puede ayudar.

Podemos configurar manualmente una conexión de multiplexación o dejar que SSH la use siempre que esté disponible. Aquí, configuraremos SSH para seguir la segunda ruta. Abra el archivo de configuración de SSH:

Agregue una definición de host con comodín en la parte superior del archivo. Esto asegura que el siguiente conjunto de directivas se aplicará a todas las conexiones remotas. Agregue las siguientes directivas:

Multiplexing SSH

La primera directiva le dice a SSH que use la multiplexación automáticamente siempre que esté disponible. La segunda directiva establece la ruta al socket de control. Este socket se creará cuando se establezca la primera sesión. Las sesiones posteriores seguirán este socket.

La última directiva le dice a SSH que permita que la conexión maestra inicial quede en segundo plano. También significa que las conexiones TCP terminarán automáticamente un segundo después de la última sesión de SSH. A continuación, cree el directorio que declaramos en el archivo de configuración:

Finalmente, la multiplexación debería estar activa.

Códigos de escape de SSH

Después de establecer una conexión, existen formas de controlar el comportamiento de la conexión mediante códigos de escape.

  • Forzar desconexiones

¿Está atascado en una sesión de SSH? Las sesiones de SSH generalmente son administradas por el servidor. Si el servidor experimenta problemas, quedarse atascado en una sesión de SSH muerta puede ser frustrante. Afortunadamente, OpenSSH ofrece controles útiles para administrar el estado de la conexión desde el lado del cliente.

Presione Enter un par de veces. Luego, ingrese el siguiente comando:

Forcing Disconnects

Aquí, ~ es el carácter de control. Después de ejecutar este comando desde el cliente, la conexión debería cerrarse inmediatamente.

  • Sesión de SSH en segundo plano

También podemos poner una sesión de SSH en segundo plano. Al ponerla en segundo plano, volverá a la sesión de shell normal. Una vez que haya terminado su trabajo, puede volver a la shell de SSH. Tenga en cuenta que debe tener una configuración de tiempo de espera adecuada para evitar que se agote el tiempo de espera mientras la sesión de SSH permanece en segundo plano. Para poner una sesión de SSH en segundo plano, ingrese el carácter de control seguido de Ctrl + Z:

SSH Background Session

Si era su tarea en segundo plano más reciente, puede reactivarla usando el siguiente comando:

Si hay múltiples tareas en segundo plano, podemos determinarlo a partir de la lista de trabajos:

Jobs

Para traer el trabajo de destino al primer plano, anote el valor del trabajo de la primera columna. Luego, ejecute el siguiente comando:

Job Foreground

  • Cambiar la configuración de reenvío de puertos

Usando el mecanismo de control, podemos cambiar las reglas de reenvío de puertos sobre la marcha. Una vez establecida la conexión, podemos crear o eliminar reglas de reenvío de puertos. Es parte de la interfaz de línea de comandos de SSH.

Para acceder a la interfaz de línea de comandos de SSH, ejecute el comando:

SSH Command Line Interface

Para listar las opciones disponibles, ingrese el siguiente comando:

Si la salida es demasiado mínima, intente aumentar el nivel de detalle utilizando el siguiente comando de control:

Ahora, ejecute el comando -h nuevamente:

SSH Command Line Help

Como explica la salida, es bastante simple implementar cualquiera de los reenvíos de puertos con un comando simple. Por ejemplo, un túnel también se puede destruir usando el comando kill, representado por K en la lista de comandos.

Pensamientos finales

Es bastante común encontrarse con SSH. Por eso aprender SSH es muy útil. Nuestra descripción general completa de SSH cubre las configuraciones de SSH más importantes que los usuarios necesitan conocer para usar SSH en el día a día. Una vez dominado, debería poder trabajar con casi todas las configuraciones de servidores SSH.

¡Feliz computación!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.