Cómo usar SSH para conectarse a un servidor remoto

Introducción

SSH es una herramienta esencial para ser un administrador de sistemas experto.

SSH, o Secure Shell, es un protocolo que se utiliza para iniciar sesión de forma segura en sistemas remotos. Es la forma más común de acceder a servidores Linux remotos.

En esta guía, analizaremos cómo usar SSH para conectarse a un sistema remoto.

Sintaxis básica

Para conectarse a un sistema remoto mediante SSH, usaremos el comando ssh. El formato más básico del comando es:

  • ssh remote_host

En este ejemplo, remote_host es la dirección IP o el nombre de dominio al que está tratando de conectarse.

Este comando asume que su nombre de usuario en el sistema remoto es el mismo que el que usa en el sistema local.

Si su nombre de usuario es diferente en el sistema remoto, puede especificarlo usando esta sintaxis:

Cuando se haya conectado al servidor, se le puede solicitar que verifique su identidad mediante el ingreso de una contraseña. Más adelante, cubriremos cómo generar claves para usar en vez de contraseñas.

Para salir de la sesión de ssh y volver a la sesión de shell local, escriba lo siguiente:

  • exit

¿Cómo funciona SSH?

SSH funciona mediante la conexión de un programa cliente a un servidor ssh, llamado sshd.

En la sección anterior, ssh era el programa cliente. El servidor ssh ya está en ejecución en el remote_host que se especificó.

En su servidor, el servidor sshd ya debe estar en ejecución. Si no es así, es posible que deba acceder a su servidor mediante una consola basada en la web o una consola serie local.

El proceso que debe iniciar un servidor ssh depende de la distribución de Linux que esté utilizando.

En Ubuntu, para iniciar el servidor ssh, debe escribir lo siguiente:

  • sudo systemctl start ssh

Eso debería iniciar el servidor sshd y, luego, puede iniciar sesión de forma remota.

Cómo configurar SSH

Cuando cambie la configuración de SSH, cambiará la configuración del servidor sshd.

En Ubuntu, el archivo de configuración sshd principal se encuentra en /etc/ssh/sshd_config.

Haga una copia de seguridad de la versión actual de este archivo antes de editarlo:

  • sudo cp /etc/ssh/sshd_config{,.bak}

Ábralo con un editor de texto:

  • sudo nano /etc/ssh/sshd_config

Tendrá que dejar la mayoría de las opciones de este archivo sin modificar. Sin embargo, es posible que desee echar un vistazo a algunas:

/etc/ssh/sshd_config

Port 22 

La declaración de puerto especifica en qué puerto se escuchará el servidor sshd para las conexiones. De forma predeterminada, es el 22. Es recomendable dejar esta configuración sin modificar, a menos que tenga razones específicas para hacerlo. Si efectivamente cambia de puerto, le mostraremos cómo conectarse al puerto nuevo más adelante.

/etc/ssh/sshd_config

HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key 

Las declaraciones de claves de host especifican dónde buscar claves de host globales. Analizaremos qué es una clave de host más adelante.

/etc/ssh/sshd_config

SyslogFacility AUTH LogLevel INFO 

Estos dos elementos indican el nivel de registro que debería ocurrir.

Si tiene dificultades con SSH, incrementar la cantidad de registros puede ser una buena forma de descubrir cuál es el problema.

/etc/ssh/sshd_config

LoginGraceTime 120 PermitRootLogin yes StrictModes yes 

Estos parámetros especifican parte de la información de inicio de sesión.

LoginGraceTime especifica cuántos segundos se mantendrá la conexión activa sin iniciar sesión correctamente.

Una buena idea puede ser establecer este tiempo en un valor un poco mayor que la cantidad de tiempo que le toma iniciar sesión normalmente.

PermitRootLogin selecciona si se permite que el usuario root inicie sesión.

En la mayoría de los casos, esto debería modificarse a no cuando haya creado una cuenta de usuario que tenga acceso a mayores privilegios (a través de su o sudo) y que pueda iniciar sesión a través de ssh.

strictModes es un protector de la seguridad que denegará un intento de inicio de sesión si cualquiera puede leer los archivos de autenticación.

Esto evita intentos de inicio de sesión cuando los archivos de configuración no son seguros.

/etc/ssh/sshd_config

X11Forwarding yes X11DisplayOffset 10 

Estos parámetros configuran una capacidad llamada Reenvío X11. Esto le permite ver en el sistema local la interfaz gráfica de usuario (GUI) del sistema remoto.

Esta opción debe habilitarse en el servidor y asignarse con el cliente SSH durante la conexión con la opción -X.

Tras realizar los cambios, guarde y cierre el archivo mediante CTRL+X e Y, seguido de INTRO.

Si modificó alguna configuración en /etc/ssh/sshd_config, asegúrese de volver a cargar el servidor sshd para implementar los cambios.

  • sudo systemctl reload ssh

Debería probar completamente los cambios para garantizar que funcionan de la forma en que se espera.

Una buena idea puede ser tener algunas sesiones activas cuando realice cambios. Esto le permitirá revertir la configuración si es necesario.

Cómo iniciar sesión en SSH con claves

Si bien es útil poder iniciar sesión en un sistema remoto usando contraseñas, es mucho mejor configurar una autenticación basada en claves.

¿Cómo funciona la autenticación basada en claves?

La autenticación basada en claves funciona mediante la creación de un par de claves: una clave privada y una clave pública.

La clave privada se encuentra en el equipo cliente y se protege y mantiene en secreto.

La clave pública puede entregarse a alguien o colocarse en cualquier servidor al que desee acceder.

Cuando intente conectarse usando un par de claves, el servidor usará la clave pública para crear un mensaje para el equipo cliente que solo puede leerse con la clave privada.

Luego, el equipo cliente envía la respuesta apropiada al servidor y así el servidor sabrá que el cliente es legítimo.

El proceso completo se realiza automáticamente después de configurar las claves.

Cómo crear claves SSH

Las claves SSH deben generarse en el equipo desde el que desea iniciar sesión. Generalmente, es su equipo local.

Ingrese lo siguiente en la línea de comandos:

  • ssh-keygen -t rsa

Presione Intro para aceptar los valores predeterminados. Sus claves se crearán en ~/.ssh/id_rsa.pub y ~/.ssh/id_rsa.

Cambie al directorio .ssh escribiendo lo siguiente:

  • cd ~/.ssh

Vea los permisos de los archivos:

  • ls -l
Output-rw-r--r-- 1 demo demo  807 Sep  9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep  9 23:13 id_rsa -rw-r--r-- 1 demo demo  396 Sep  9 23:13 id_rsa.pub 

Como puede ver, solo el propietario puede leer el archivo id_rsa y escribir en él. Así es como debería ser mantenerlo en secreto.

Sin embargo, el archivo id_rsa.pub puede compartirse y tiene permisos apropiados para esta actividad.

Cómo transferir su clave pública al servidor

Si actualmente tiene acceso con contraseña a un servidor, puede copiar su clave pública en él mediante la emisión de este comando:

  • ssh-copy-id remote_host

Con esto se iniciará una sesión SSH. Después de ingresar su contraseña, su clave pública se copiará en el archivo de claves autorizadas del servidor, lo que le permitirá iniciar sesión sin la contraseña la próxima vez.

Opciones del lado del cliente

Hay varios indicadores opcionales que puede seleccionar cuando se conecta mediante SSH.

Algunos de ellos pueden ser necesarios para que la configuración coincida con la del sshd del host remoto.

Por ejemplo, si cambió el número de puerto en su configuración de sshd, también deberá cambiarlo en el lado del cliente para que coincida escribiendo lo siguiente:

  • ssh -p port_number remote_host

Si solo desea ejecutar un comando único en un sistema remoto, puede especificarlo después del host como este:

  • ssh remote_host command_to_run

Se conectará al equipo remoto, se autenticará y se ejecutará el comando.

Como dijimos antes, si el reenvío X11 se habilita en ambas computadoras, puede acceder a esa funcionalidad escribiendo lo siguiente:

  • ssh -X remote_host

Siempre que tenga las herramientas apropiadas en su computadora, los programas de GUI que utiliza en el sistema remoto ahora abrirán su ventana en el sistema local.

Cómo deshabilitar la autenticación mediante contraseña

Si creó claves SSH, puede mejorar la seguridad de su servidor deshabilitando la autenticación únicamente mediante contraseña. Aparte de la consola, la única forma de iniciar sesión en su servidor será mediante la clave privada que se empareja con la clave pública que se haya instalado en el servidor.

Advertencia: Antes de continuar con este paso, asegúrese de haber instalado una clave pública en su servidor. Si no es así, quedará bloqueado.

Como root o usuario con privilegios sudo, abra el archivo de configuración sshd:

  • sudo nano /etc/ssh/sshd_config

Busque la línea que dice Password Authentication y quite el comentario en ella eliminando el # inicial. Luego, puede cambiar su valor a no:

/etc/ssh/sshd_config

PasswordAuthentication no 

Dos parámetros adicionales que no deben modificarse (siempre que no haya modificado este archivo antes) son PubkeyAuthentication y PubkeyAuthentication. Están configurados de forma predeterminada y deben mostrar lo siguiente:

/etc/ssh/sshd_config

PubkeyAuthentication yes ChallengeResponseAuthentication no 

Después de realizar los cambios, guarde y cierre el archivo.

Ahora puede volver a cargar el demonio SSH:

  • sudo systemctl reload ssh

Ahora, la autenticación mediante contraseña debería deshabilitarse y solo debe poder acceder a su servidor mediante la autenticación de claves SSH.

Conclusión

Aprender cómo usar SSH es un proceso que vale la pena, aunque solo sea una actividad común.

A medida que utilice las diversas opciones, descubrirá funciones más avanzadas que pueden facilitarle la vida. SSH ha mantenido su popularidad porque es seguro, ligero y útil en diversas situaciones.