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:
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:
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.
¿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:
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:
Ábrelo usando nano
o tu editor de texto favorito:
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:
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.
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.
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.
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.
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:
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:
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:
Consulte los permisos de los archivos:
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:
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:
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:
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:
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
:
Localiza la línea que dice Authentication
, y descoméntala eliminando el #
inicial. Luego, puedes cambiar su valor a no
:
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:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Después de realizar tus cambios, guarda y cierra el archivo.
Ahora puedes recargar el demonio 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