Introducción
Una herramienta esencial que debe dominar un administrador de sistemas es SSH.
SSH, o Secure Shell , es un protocolo utilizado para acceder de forma segura a 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 conectarnos a un sistema remoto usando SSH, usaremos el ssh
comando.
Si usa Windows, necesitará instalar una versión de OpenSSH para poder acceder ssh
desde una terminal. Si prefiere trabajar con PowerShell, puede consultar la documentación de Microsoft para añadir OpenSSH a PowerShell. Si prefiere disponer de un entorno Linux completo, puede configurar WSL (el Subsistema de Windows para Linux), que se incluirá ssh
por defecto. Finalmente, como tercera opción ligera, puede instalar Git para Windows , que proporciona un entorno de terminal bash nativo de Windows que incluye el ssh
comando. Todas estas opciones son compatibles, y la que elija dependerá de sus preferencias.
Si estás usando Mac o Linux, ya tendrás el ssh
comando disponible en tu terminal.
La forma más directa del comando es:
ssh remote_host
En este ejemplo se utiliza la remote_host
dirección IP o el nombre de dominio al que intenta conectarse.
Este comando asume que su nombre de usuario en el sistema remoto es el mismo que su nombre de usuario en su sistema local.
Si su nombre de usuario es diferente en el sistema remoto, puede especificarlo utilizando esta sintaxis:
ssh remote_username@remote_host
Una vez conectado al servidor, es posible que se le solicite verificar su identidad mediante una contraseña. Más adelante, explicaremos cómo generar claves para usarlas en lugar de contraseñas.
Para salir de la sesión ssh y regresar a su sesión de shell local, escriba:
exit
¿Cómo funciona SSH?
SSH funciona conectando un programa cliente a un servidor ssh , llamado sshd
.
En la sección anterior, ssh
se encontraba el programa cliente. El servidor SSH ya se estaba ejecutando en el remote_host
servidor que especificamos.
En casi todos los entornos Linux, el sshd
servidor debería iniciarse automáticamente. Si no se ejecuta por algún motivo, es posible que necesite acceder temporalmente a su servidor mediante una consola web o una consola serie local.
El proceso necesario para iniciar un servidor ssh depende de la distribución de Linux que esté utilizando.
En Ubuntu, puedes iniciar el servidor ssh escribiendo:
sudo systemctl start ssh
Esto debería iniciar el servidor sshd y luego podrás iniciar sesión de forma remota.
Cómo configurar SSH
Cuando cambia la configuración de SSH, está cambiando la configuración del sshd
servidor.
En Ubuntu, el sshd
archivo de configuración 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}
Ábrelo usando nano
tu editor de texto favorito:
sudo nano /etc/ssh/sshd_config
Le recomendamos no modificar la mayoría de las opciones de este archivo. Sin embargo, hay algunas que podría considerar: /etc/ssh/sshd_config
Port 22
La declaración del puerto especifica en qué puerto el sshd
servidor escuchará las conexiones. Por defecto, es 22
. Probablemente debería dejar esta configuración sin modificar a menos que tenga razones específicas para hacerlo. Si cambia de puerto, le mostraremos cómo conectarse 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 clave de host especifican dónde buscar las claves de host globales. Más adelante explicaremos qué es una clave de host. /etc/ssh/sshd_config
SyslogFacility AUTH
LogLevel INFO
Estos dos elementos indican el nivel de registro que debe realizarse.
Si tiene dificultades con SSH, aumentar la cantidad de registros 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 se debe mantener activa la conexión sin iniciar sesión correctamente.
Puede ser una buena idea establecer este tiempo apenas un poco más alto que el tiempo que le toma iniciar sesión normalmente.
PermitRootLogin
Selecciona si el usuario root puede iniciar sesión.
En la mayoría de los casos, esto se debe cambiar no
cuando haya 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 root a su servidor.
strictModes
es una protección 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 función llamada Reenvío X11 . Esto 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 entregada al cliente SSH durante la conexión con la -X
opción.
Después de realizar los cambios, guarde y cierre el archivo. Si usa 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 volver a cargar su sshd
servidor para implementar las modificaciones:
sudo systemctl reload ssh
Debes probar exhaustivamente tus cambios para asegurarte de que funcionen como esperas.
Sería buena idea tener abiertas varias sesiones de terminal mientras se realizan cambios. Esto le permitirá revertir la configuración si es necesario sin bloquearse.
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 mediante la creación de un par de claves: una clave privada y una clave pública .
La clave privada se encuentra en la máquina del cliente y está protegida y se mantiene en secreto.
La clave pública se puede entregar a cualquier persona o colocar en cualquier servidor al que desee acceder.
Cuando intenta conectarse utilizando un par de claves, el servidor utilizará la clave pública para crear un mensaje para la computadora cliente que sólo se puede leer con la clave privada.
Luego, la computadora cliente envía la respuesta apropiada al servidor, que le indicará que el cliente es legítimo.
Este proceso se realiza automáticamente después de configurar sus claves.
Cómo crear claves SSH
Las claves SSH deben generarse en el ordenador desde el que desea iniciar sesión . Normalmente, este es su equipo local.
Introduzca lo siguiente en la línea de comando:
ssh-keygen -t rsa
Es posible que se le solicite que establezca una contraseña para los archivos de claves, pero esto es poco común, y debe presionar Enter durante las indicaciones para aceptar los valores predeterminados. Sus claves se crearán en ~/.ssh/id_rsa.pub y ~/.ssh/id_rsa .
Cambie al .ssh
directorio escribiendo:
cd ~/.ssh
Mira 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, el id_rsa
archivo solo es legible y escribible para el propietario. Esto ayuda a mantenerlo en secreto.
id_rsa.pub
Sin embargo, el archivo se puede compartir y tiene los permisos adecuados para esta actividad.
Cómo transferir su clave pública al servidor
Si actualmente tiene acceso a un servidor mediante contraseña, puede copiar su clave pública emitiendo este comando:
ssh-copy-id remote_host
Esto iniciará una sesión SSH. Tras introducir su contraseña, se copiará su clave pública al archivo de claves autorizadas del servidor, lo que le permitirá iniciar sesión sin contraseña la próxima vez.
Opciones del lado del cliente
Hay una serie de indicadores opcionales que puedes proporcionar al conectarte a través de SSH.
Algunos de estos pueden ser necesarios para que coincidan con la sshd
configuración del host remoto.
Por ejemplo, si cambió el número de puerto en su sshd
configuración, deberá hacer coincidir ese puerto en el lado del cliente escribiendo:
ssh -p port_number remote_host
Nota: Cambiar el puerto SSH es una forma razonable de proporcionar seguridad mediante la opacidad . Si permite conexiones SSH a una implementación de servidor ampliamente conocida en el puerto 22
de forma normal y tiene habilitada la autenticación con contraseña, es probable que sufra numerosos intentos de inicio de sesión automatizados. Usar exclusivamente la autenticación basada en clave y ejecutar SSH en un puerto no estándar no es la solución de seguridad más compleja, pero debería minimizarlos.
Si solo desea ejecutar un único comando en un sistema remoto, puede especificarlo después del host de la siguiente manera:
ssh remote_host command_to_run
Se conectará a la máquina remota, se autenticará y se ejecutará el comando.
Como dijimos antes, si el reenvío X11 está habilitado en ambas computadoras, puedes acceder a esa funcionalidad escribiendo:
ssh -X remote_host
Si tiene las herramientas adecuadas en su computadora, los programas GUI que use en el sistema remoto ahora abrirán su ventana en su sistema local.
Deshabilitar la autenticación de contraseña
Si ha creado claves SSH, puede mejorar la seguridad de su servidor desactivando la autenticación solo con contraseña. Además de la consola, la única forma de iniciar sesión en su servidor será mediante la clave privada que coincide con la clave pública que haya instalado.
Advertencia: Antes de continuar con este paso, asegúrese de haber instalado una clave pública en su servidor. De lo contrario, se bloqueará su acceso.
Como root o usuario con privilegios sudo, abra el sshd
archivo de configuración:
sudo nano /etc/ssh/sshd_config
Localice la línea que dice Password Authentication
y descomentela eliminando el #
. Luego puede cambiar su valor a no
: /etc/ssh/sshd_config
PasswordAuthentication no
Dos configuraciones más que no deberían necesitar modificarse (siempre que no haya modificado este archivo previamente) son PubkeyAuthentication
y ChallengeResponseAuthentication
. Están configuradas por defecto y deberían tener el siguiente formato: /etc/ssh/sshd_config
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Después de realizar los cambios, guarde y cierre el archivo.
Ahora puedes recargar el demonio SSH:
sudo systemctl reload ssh
La autenticación de contraseña ahora debe estar deshabilitada y su servidor debe ser accesible solo a través de la autenticación de clave SSH.
Conclusión
Aprender a usar SSH te beneficiará enormemente en tus futuras iniciativas de computación en la nube. A medida que uses las distintas opciones, descubrirás funciones más avanzadas que te facilitarán la vida. SSH se ha mantenido popular gracias a su seguridad, ligereza y utilidad en diversas situaciones.
A continuación, es posible que desee obtener información sobre cómo trabajar con SFTP para realizar transferencias de archivos mediante la línea de comandos.