Breve: en esta guía, analizaremos los casos de uso comunes de SSH. También analizaremos las configuraciones de SSH de uso común que se pueden usar en la vida cotidiana para aumentar su productividad.
Cubierta segura (SSH) es un protocolo de red ampliamente adoptado, que nos permite interactuar con hosts remotos de forma segura. Proporciona seguridad al cifrar todas las comunicaciones entre ellos.
En esta sección, discutiremos algunos de los casos de uso más populares del SSH protocolo.
Hay varias formas de interactuar con hosts remotos de Linux utilizando protocolos como telnet, ftp, netcat, etc. Sin embargo, estos no son seguros debido a la ausencia de encriptación. Podemos usar el protocolo SSH para permitir una comunicación segura entre los hosts.
Tenemos que usar un SSH cliente para interactuar con el host remoto. Hay muchos clientes basados en GUI y CLI disponibles para Linux. Sin embargo, a lo largo de esta guía, utilizaremos una utilidad de línea de comandos llamada
ssh. Por defecto, el ssh La utilidad está disponible en la mayoría de las distribuciones de Linux.La sintaxis del comando SSH es la siguiente:
$ ssh [OPCIONES] [COMANDOS] [ARGUMENTOS]
Aquí, los corchetes ([])
representan los argumentos opcionales mientras que los corchetes angulares (<>)
representan los argumentos obligatorios.
Conectémonos al host remoto usando el ssh cliente:
$ ssh -l raíz 192.168.19.130.
En este ejemplo, especificamos el nombre de inicio de sesión usando el -l
opción y el destino es 192.168.19.130. La conexión SSH se establece después de ingresar la contraseña correcta. Ahora en adelante, podemos ejecutar los comandos en el host remoto al igual que el sistema local.
# nombre de host.
Para terminar la sesión, podemos usar el salida comando o Ctrl+D
combinación de teclas
Es importante tener en cuenta que tenemos que autenticarnos con el host remoto para cada nueva sesión. Para evitar introducir contraseñas cada vez, podemos configurar un inicio de sesión sin contraseña SSH.
En la sección anterior, vimos cómo establecer una conexión con un host remoto, lo cual es adecuado solo cuando vamos a utilizar el host remoto durante más tiempo. A veces, solo necesitamos ejecutar uno o dos comandos en el host remoto. En tales casos, podemos ejecutar esos comandos sin crear una sesión a largo plazo.
Ejecutemos el comando de nombre de host en el host remoto:
$ ssh -l raíz 192.168.19.130 nombre de host.
De manera similar, podemos ejecutar varios comandos en una máquina Linux remota:
$ ssh -l raíz 192.168.19.130 'nombre de host; pwd'
Es importante tener en cuenta que los comandos deben ir entre comillas y separados por punto y coma. (;)
personaje. Si desea ejecutar comandos en varios hosts remotos de Linux, lea nuestro artículo: Pssh: ejecute comandos en varios hosts remotos de Linux.
Similar a los comandos, también podemos ejecutar un script local en el host remoto. Entendamos esto con un ejemplo.
Primero, cree un script de shell simple en una máquina local con permisos ejecutables:
$ cat script.sh nombre de host. pwd.
Ahora, vamos a ejecutarlo en el host remoto:
$ ssh [correo electrónico protegido] 'bash -s' < ./script.sh
En este ejemplo, hemos utilizado el -s
opción del bash para leer el script desde la entrada estándar.
Trabajamos con los archivos y directorios muy a menudo. Una operación común que realizan los usuarios es copiar directorios y archivos. Al igual que las máquinas locales, podemos copiar archivos y directorios entre los hosts remotos usando el comando scp, que copia los archivos de forma segura mediante el protocolo SSH.
Copiemos el script.sh archivo a la /tmp directorio del host remoto:
$ script scp.sh [correo electrónico protegido]:/tmp.
Ahora, verifique que el archivo haya sido copiado:
$ ssh [correo electrónico protegido] 'ls /tmp/script.sh'
De manera similar, podemos usar el comando scp para copiar los directorios. Sin embargo, tenemos que usar el -r
opción con el comando.
SSH soporta la compresión de datos usando el gzip algoritmo de compresión, que comprime todos los flujos de datos posibles, como stdin, stdout, stderr, etc. Esta opción es muy útil cuando se utilizan conexiones de red lentas.
Podemos habilitar la compresión en SSH usando el -C
opción:
$ ssh -C -l raíz 192.168.19.130 'nombre de host'
Los usuarios de Linux a menudo necesitan depurar sesiones SSH para investigar varios problemas relacionados con la configuración y la conexión SSH. En tales casos, podemos habilitar el modo detallado que imprime los registros de depuración de la sesión actual.
Habilitemos el modo detallado usando el -v
opción:
$ ssh -v -l raíz 192.168.19.130 nombre de host.
Además de esto, podemos aumentar el nivel de verbosidad usando los múltiples -v
opciones
-v
– establece el nivel de verbosidad en 1 y proporciona detalles sobre las actividades del lado del cliente.-vv
– establece el nivel de detalle en 2 y proporciona detalles sobre las actividades del lado del cliente y del servidor.-vvv
– establece el nivel de detalle en 3 y proporciona información más detallada sobre las actividades del lado del cliente y del servidor.El nivel máximo de verbosidad admitido por SSH es 3. Veamos esto en acción:
$ ssh -vvv -l raíz 192.168.19.130 nombre de host.
En el ejemplo anterior, depurar1 representa el mensaje de depuración habilitado por el nivel de detalle 1. Similarmente, depurar2 y depurar3 representan los mensajes de depuración habilitados por los niveles de detalle 2 y 3 respectivamente.
Podemos usar secuencias de escape con el SSH para gestionar las sesiones de terminal de cliente. Analicemos las secuencias de escape de uso común con los casos de uso apropiados.
A veces, tenemos que realizar algunas actividades en la máquina local sin finalizar la sesión SSH actual. En tal escenario, podemos suspender la sesión actual usando el ~ + ctrl + z
secuencia de teclas.
Primero, inicie sesión en el host remoto y ejecute el nombre de host dominio:
$ ssh -l raíz 192.168.19.130. # nombre de host.
A continuación, para suspender la sesión actual, primero escriba tilde (~)
carácter y luego presione el ctrl + z
llaves. Es importante señalar que la tilde (~)
el carácter no se mostrará en la salida estándar hasta que presionemos ctrl + z
.
Ahora, verifiquemos que la sesión ha sido suspendida:
$ puestos de trabajo.
Aquí podemos ver que la sesión SSH actual se está ejecutando en segundo plano.
Reanudemos la sesión nuevamente usando el fg ordenar y ejecutar el nombre de host dominio:
$ fg %1.
Estoy seguro de que debe haber visto las sesiones SSH congeladas, que ocurren cuando la sesión es interrumpida por una red inestable. Aquí, no podemos abortar la sesión usando el salida dominio. Sin embargo, podemos terminarlo usando el "~ + ."
secuencia de teclas.
Primero, inicie sesión en el host remoto:
$ ssh -l raíz 192.168.19.130.
Ahora usa el "~ + ."
combinación de teclas para terminar la sesión actual.
En este ejemplo, podemos ver que SSH muestra el mensaje - Conexión al 192.168.19.130 cerrada.
Una cosa interesante es que hay una secuencia de escape para enumerar todas las secuencias de escape admitidas. Podemos usar el “~ + ?”
secuencia de escape para enumerar las secuencias de escape admitidas:
Aquí, tenemos que presionar la tecla enter para salir del menú de ayuda.
En esta sección, discutiremos la configuración del lado del servidor para endurecer el servidor SSH. El servidor SSH almacena toda su configuración en /etc/ssh/sshd_config archivo. Es importante tener en cuenta que se requiere acceso de usuario raíz para actualizar la configuración de SSH.
Como práctica recomendada, siempre debemos mostrar el banner antes de establecer una conexión SSH. En algunos casos, disuade a los usuarios no autorizados de acceder a hosts remotos. Veamos cómo habilitar esta configuración paso a paso.
Primero, cree un archivo de texto en un servidor remoto con un mensaje de advertencia:
# vi /etc/banner.txt
A continuación, agregue el siguiente mensaje de banner:
********************************************************************* ¡¡¡Advertencia!!! Está intentando iniciar sesión en el servidor de techmint.com. Todas las actividades en este servidor son monitoreadas. Termina la sesión inmediatamente si no eres un usuario autorizado. *********************************************************************
A continuación, abra el /etc/ssh/sshd_config archivo y especifique el archivo con el Bandera directiva:
Banner /etc/banner.txt.
Ahora, reinicie el sshd servicio y terminar la sesión usando el salida dominio:
# systemctl reiniciar sshd. # salida.
Finalmente, verifique el banner iniciando sesión en el host remoto:
$ ssh -l raíz 192.168.19.130.
Aquí, podemos que el servidor muestra el banner SSH correctamente.
Hasta ahora, usamos el usuario raíz para acceder al host remoto. Sin embargo, esto va en contra del principio de privilegio mínimo. En un entorno de producción, el acceso del usuario root siempre está restringido para mejorar la seguridad.
Podemos usar el PermitRootLogin directiva para deshabilitar el inicio de sesión del usuario raíz.
Primero, abra el /etc/ssh/sshd_config archivo y use la opción No
con el PermitRootLogin directiva:
PermitRootLogin no.
Ahora, reinicie el sshd servicio y terminar la sesión usando el salida dominio:
# systemctl reiniciar sshd. # salida.
Finalmente, verifique esto creando una nueva sesión SSH:
$ ssh -l raíz 192.168.19.130.
Aquí, podemos observar que no podemos iniciar sesión en el host remoto con el usuario raíz. Para permitir el inicio de sesión del usuario root, podemos usar la opción Sí
con la misma directiva.
Por defecto, SSH utiliza el puerto TCP 22. Sin embargo, podemos configurar SSH para que se ejecute en un puerto diferente, es decir, 8088.
Primero, abra el /etc/ssh/sshd_config archivar y usar el 8088 valor con el Puerto directiva:
Puerto 8088.
A continuación, reinicie el servicio sshd y finalice la sesión:
# systemctl reiniciar sshd. # salida.
Ahora, iniciemos sesión en el host remoto:
$ ssh -p 8088 -l raíz 192.168.19.130.
En este ejemplo, hemos utilizado el -pag
opción para especificar el número de puerto.
En algunos casos, tenemos que realizar algunos otros pasos para permitir la comunicación en un puerto no predeterminado. Como identificar los puertos disponibles, actualizar las reglas del firewall, la configuración de SELinux, etc.
En este artículo, discutimos el protocolo SSH y sus casos de uso comunes. A continuación, discutimos algunas opciones comunes. Finalmente, discutimos algunos de los ajustes para proteger el servidor SSH.
¿Conoces algún otro mejor uso del comando SSH en Linux? Háganos saber sus puntos de vista en los comentarios a continuación.