Cómo Usar SSH para Conectarse a un Servidor Remoto

Introducción

Una herramienta esencial que dominar como administrador del sistema es SSH.

SSH, o Shell Seguro, es un protocolo utilizado 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, discutiremos cómo usar SSH para conectarnos a un sistema remoto.

Implementa tus aplicaciones frontend desde GitHub usando Plataforma de Aplicaciones DigitalOcean. Deja que DigitalOcean se encargue de escalar tu aplicación.

Sintaxis Principal

Para conectarse a un sistema remoto usando SSH, utilizaremos el comando ssh.

Si estás utilizando Windows, necesitarás instalar una versión de OpenSSH para poder ssh desde una terminal. Si prefieres trabajar en PowerShell, puedes seguir la documentación de Microsoft para agregar OpenSSH a PowerShell. Si prefieres tener disponible un entorno completo de Linux, puedes configurar WSL, el Subsistema de Windows para Linux, que incluirá ssh por defecto. Finalmente, como tercera opción ligera, puedes instalar Git para Windows, que proporciona un entorno de terminal bash nativo para Windows que incluye el comando ssh. Cada una de estas opciones tiene un buen soporte y la elección de cuál usar dependerá de tus preferencias.

Si estás utilizando un Mac o Linux, ya tendrás disponible el comando ssh en tu terminal.

La forma más sencilla del comando es:

  1. ssh remote_host

El host_remoto en este ejemplo es la dirección IP o nombre de dominio al que estás intentando conectarte.

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

Si tu nombre de usuario es diferente en el sistema remoto, puedes especificarlo utilizando esta sintaxis:

  1. ssh remote_username@remote_host

Una vez que te hayas conectado al servidor, es posible que se te pida verificar tu identidad proporcionando una contraseña. Más adelante, veremos cómo generar claves para usar en lugar de contraseñas.

  1. exit

¿Cómo funciona SSH?

SSH funciona conectando un programa cliente a un servidor SSH, llamado sshd.

En la sección anterior, ssh fue el programa cliente. El servidor SSH ya estaba ejecutándose en el remote_host que especificamos.

En casi todos los entornos Linux, el servidor sshd debería comenzar automáticamente. Si no está en ejecución por alguna razón, es posible que deba acceder temporalmente a su servidor a través de una consola web basada en web o un puerto serie local.

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

En Ubuntu, puede iniciar el servidor ssh escribiendo:

  1. sudo systemctl start ssh

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

Cómo configurar SSH

Cuando cambia la configuración de SSH, está cambiando las configuraciones del servidor sshd.

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

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

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

Ábrelo usando nano o tu editor de texto favorito:

  1. sudo nano /etc/ssh/sshd_config

Querrás dejar la mayoría de las opciones en este archivo tal como están. Sin embargo, hay algunas que quizás quieras revisar:

/etc/ssh/sshd_config
Port 22

La declaración del puerto especifica en qué puerto escuchará el servidor sshd para conexiones. Por defecto, este es 22. Probablemente deberías dejar esta configuración tal como está, a menos que tengas razones específicas para hacer lo contrario. Si modificas el puerto, te mostraremos cómo conectarte al nuevo puerto 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 las claves de host especifican dónde buscar las claves de host globales. Discutiremos 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 debe ocurrir.

Si tienes dificultades con SSH, aumentar la cantidad de registro puede ser una buena manera 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 mantener la conexión viva sin iniciar sesión correctamente.

Podría ser una buena idea establecer este tiempo un poco más alto que el tiempo que normalmente tardas en iniciar sesión.

PermitRootLogin selecciona si el usuario root está autorizado para iniciar sesión.

En la mayoría de los casos, esto debería cambiarse a no cuando hayas creado una cuenta de usuario que tenga acceso a privilegios elevados (a través de su o sudo) y pueda iniciar sesión a través de SSH, para minimizar el riesgo de que alguien obtenga acceso de root a tu servidor.

strictModes es una medida de seguridad que rechazará un intento de inicio de sesión si los archivos de autenticación son legibles por todos.

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 de X11. Esto le permite ver la interfaz gráfica de usuario (GUI) de un sistema remoto en el sistema local.

Esta opción debe estar habilitada en el servidor y dada con el cliente SSH durante la conexión con la opción -X.

Después de hacer sus cambios, guarde y cierre el archivo. Si está utilizando nano, presione Ctrl+X, luego cuando se le solicite, Y y luego Enter.

Si cambió alguna configuración en /etc/ssh/sshd_config, asegúrese de recargar su servidor sshd para implementar sus modificaciones:

  1. sudo systemctl reload ssh

Debería probar minuciosamente sus cambios para asegurarse de que funcionen de la manera que espera.

Puede ser una buena idea tener algunas sesiones de terminal abiertas mientras realiza cambios. Esto le permitirá revertir la configuración si es necesario sin quedarse bloqueado.

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 más rápido y seguro configurar la autenticación basada en claves.

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

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

La clave privada se encuentra en la máquina cliente y se mantiene segura y en secreto.

La clave pública puede ser dada a cualquier persona o colocada en cualquier servidor al que desees acceder.

Cuando intentas conectarte usando un par de claves, el servidor utilizará la clave pública para crear un mensaje para la computadora cliente que solo puede ser leído con la clave privada.

Luego, la computadora cliente envía la respuesta adecuada de vuelta al servidor y este sabrá que el cliente es legítimo.

Este proceso se realiza automáticamente después de configurar tus claves.

Cómo crear claves SSH

Las claves SSH deben ser generadas en la computadora desde la que deseas iniciar sesión desde. Esto suele ser tu máquina local.

Ingresa lo siguiente en la línea de comandos:

  1. ssh-keygen -t rsa

Es posible que se le solicite establecer una contraseña en los archivos clave mismos, pero esta es una práctica bastante poco común, y debería presionar enter a través de los avisos para aceptar los valores predeterminados. Sus claves se crearán en ~/.ssh/id_rsa.pub y ~/.ssh/id_rsa.

Cambie al directorio .ssh escribiendo:

  1. cd ~/.ssh

Consulte los permisos de los archivos:

  1. 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, el archivo id_rsa es legible y escribible solo para el propietario. Esto ayuda a mantenerlo en secreto.

El archivo id_rsa.pub, sin embargo, se puede compartir y tiene permisos apropiados para esta actividad.

Cómo Transferir Su Clave Pública al Servidor

Si actualmente tiene acceso basado en contraseña a un servidor, puede copiar su clave pública a él emitiendo este comando:

  1. ssh-copy-id remote_host

Esto iniciará una sesión SSH. Después de ingresar su contraseña, copiará su clave pública al 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 proporcionar al conectarse a través de SSH.

Algunos de estos pueden ser necesarios para que coincidan con la configuración en el archivo sshd del host remoto.

Por ejemplo, si cambió el número de puerto en su configuración de sshd, necesitará coincidir ese puerto en el lado del cliente escribiendo:

  1. ssh -p port_number remote_host

Nota: Cambiar el puerto ssh es una forma razonable de proporcionar seguridad a través de la oscuridad. Si está permitiendo conexiones ssh a un servidor ampliamente conocido en el puerto 22 como normal, y tiene habilitada la autenticación por contraseña, es probable que sea atacado por muchos intentos de inicio de sesión automatizados. El uso exclusivo de la autenticación basada en clave y la ejecución de ssh en un puerto no estándar no es la solución de seguridad más compleja que puede emplear, pero debería reducirlos al mínimo.

Si solo desea ejecutar un único comando en un sistema remoto, puede especificarlo después del host de la siguiente manera:

  1. ssh remote_host command_to_run

Se conectará a la máquina remota, se autenticará y se ejecutará el comando.

Como mencionamos anteriormente, si el reenvío de X11 está habilitado en ambas computadoras, puede acceder a esa funcionalidad escribiendo:

  1. ssh -X remote_host

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

Desactivar la autenticación por contraseña

Si has creado claves SSH, puedes mejorar la seguridad de tu servidor desactivando la autenticación solo por contraseña. Aparte de la consola, la única forma de iniciar sesión en tu servidor será a través de la clave privada que se empareja con la clave pública que has instalado en el servidor.

Advertencia: Antes de proceder con este paso, asegúrate de haber instalado una clave pública en tu servidor. ¡De lo contrario, quedarás bloqueado/a fuera!

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

  1. sudo nano /etc/ssh/sshd_config

Localiza la línea que dice Authentication, y descoméntala eliminando el # inicial. Luego, puedes cambiar su valor a no:

/etc/ssh/sshd_config
PasswordAuthentication no

Dos ajustes más que no deberían necesitar modificarse (si no has modificado este archivo anteriormente) son PubkeyAuthentication y ChallengeResponseAuthentication. Están configurados por defecto, y deberían leerse de la siguiente manera:

/etc/ssh/sshd_config
PubkeyAuthentication yes
ChallengeResponseAuthentication no

Después de realizar tus cambios, guarda y cierra el archivo.

Ahora puedes recargar el demonio SSH:

  1. sudo systemctl reload ssh

La autenticación por contraseña debería estar desactivada ahora, y tu servidor debería ser accesible solo a través de la autenticación con clave SSH.

Conclusión

Aprender a manejar SSH beneficiará enormemente cualquier proyecto futuro de computación en la nube. A medida que utilices las diversas opciones, descubrirás funcionalidades más avanzadas que pueden facilitarte la vida. SSH ha mantenido su popularidad porque es seguro, liviano y útil en diversas situaciones.

A continuación, es posible que desees aprender sobre trabajar con SFTP para realizar transferencias de archivos desde la línea de comandos.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server