Tutoriales

Use sshpass en una secuencia de comandos para el inicio de sesión SSH no interactivo

En esta guía, aprenderemos que es sshpass utilidad, como Instalar sshpass en Linux y BSD gratis sistema y como Inicio de sesión SSH no interactivo mediante sshpass En scripts de shell de Linux y Unix.

introducir

Como administrador del sistema Linux, es posible que deba acceder a máquinas remotas y transferir archivos entre ellas varias veces al día.Una forma de acceder al sistema remoto es SSHLos dos métodos de autenticación SSH más utilizados son basado en contraseña Métodos y autenticación basada en clave método.

En los métodos de autenticación basados ​​en contraseña, los usuarios deben ingresar manualmente sus contraseñas cada vez que se autentican en un sistema remoto. Este enfoque es un poco tedioso y no es adecuado para automatizar tareas a través de scripts. Porque el usuario aún tiene que ingresar manualmente la contraseña cada vez.Entonces, si desea implementar la autenticación SSH basada en contraseña en su secuencia de comandos, puede probar sshpass Utilidad de línea de comandos.

¿Qué es sshpass?

La utilidad sshpass está diseñada para ejecutar ssh utilizando el modo de autenticación de contraseña interactivo del teclado, pero en un modo no interactivo. En resumen, sshpass proporciona una forma no interactiva de autenticar sesiones SSH.

SSH utiliza el acceso TTY directo para garantizar que el usuario del teclado interactivo haya emitido la contraseña. sshpass ejecuta ssh en un tty dedicado, engañándolo para que piense que obtiene la contraseña del usuario interactivo.

Instalar sshpass en Linux

La utilidad sshpass está disponible en los repositorios predeterminados de muchas distribuciones de Linux. Por ejemplo, puede instalar sshpass en Arch Linux y sus variantes como EndeavourOS y Manjaro Linux con el siguiente comando:

$ sudo pacman -S sshpass

Instale sshpass en Debian, Ubuntu y derivados:

$ sudo apt install sshpass

Instale sshpass en Fedora, RHEL, CentOS, AlmaLinux y Rocky Linux:

$ sudo dnf install sshpass

Instale sshpass en openSUSE:

$ sudo zypper install sshpass

Para instalar sshpass en FreeBSD, ejecute el siguiente comando root usuario:

# cd /usr/ports/security/sshpass/ && make install clean
# pkg install sshpass

Un recordatorio: Todos estos métodos son altamente inseguroTodos los usuarios del sistema pueden ver la contraseña en el comando, solo emita ps Ordenar.Esto es No recomendado Utilice estos métodos en la producción.mejor para usar Autenticación SSH basada en clave en cambio.

Inicio de sesión SSH no interactivo mediante sshpass

Tomemos algunos ejemplos para comprender cómo usar sshpass para un inicio de sesión SSH no interactivo, es decir, sin ingresar una contraseña SSH.

Ejemplo 1: inicio de sesión ssh en un sistema remoto mediante sshpass

sshpass puede aceptar una contraseña como argumento, leer la contraseña a través de una variable de entorno o leer la contraseña de un archivo de texto.

Veamos un ejemplo de cada método.

Proporcionar contraseña como parámetro

Para proporcionar una contraseña como parámetro, utilice -p Las opciones son las siguientes.

$ sshpass -p  ssh [email protected]

ejemplo:

$ sshpass -p almalinux ssh [email protected]

aquí,

  • -p almalinux – Proporcione la contraseña del sistema remoto (es decir, ubuntu).
  • [email protected] – Nombre de usuario remoto y dirección IP.

Salida de muestra:

Last login: Tue Oct 11 12:33:20 2022 from 192.168.1.101
[[email protected] ~]$ 
Inicio de sesión SSH no interactivo mediante sshpass

También puede ejecutar comandos en sistemas remotos sin iniciar sesión.

$ sshpass -p almalinux ssh [email protected] uname -a

Lea la siguiente guía para obtener más información sobre cómo ejecutar comandos en un sistema Linux remoto a través de SSH.

Proporcione la contraseña como una variable de entorno

En este método, declaramos un método llamado SSHPASS Utilice la contraseña del sistema remoto como su valor. Esto es un poco mejor que proporcionar la contraseña directamente como parámetro.

Primer uso export El comando guarda la contraseña en una variable de entorno denominada SSHPASS Como sigue:

$ export SSHPASS=almalinux

Luego proporcionamos la contraseña. -e Los signos son los siguientes:

$ sshpass -e ssh [email protected]

También puede combinar los dos comandos y ejecutarlos como un solo comando, como se muestra a continuación.

$ SSHPASS=almalinux sshpass -e ssh [email protected]

Este método también expone la contraseña a un archivo de historial, disponible para todos los usuarios. history Ordenar. Para evitar que los usuarios vean las contraseñas, simplemente borre el historial de bash.

Leer contraseña del archivo de texto

Agregue la contraseña a un archivo de texto llamado mypassword.txt y echo Ordenar:

$ echo "almalinux" > mypassword.txt

Proteja el archivo con una contraseña chmod Ordenar:

$ chmod 0400 mypassword.txt

Ahora, pase el archivo de contraseña a sshpass -f Los signos son los siguientes:

$ sshpass -f mypassword.txt ssh [email protected]

Cifrar archivo de contraseña con gpg

En el ejemplo anterior, guardamos la contraseña en un archivo llamado «mysshpassword.txt» y use -f bandera.También podemos cifrar el archivo de contraseña de texto sin formato usando gpg.

Agregue la contraseña a un archivo de texto llamado mysshpassword y echo Ordenar:

$ echo "almalinux" > ~/.mysshpassword

te diste cuenta que puse un punto antes de mysshcontraseña? Esto significa que he ocultado el archivo de contraseñas en mi directorio $HOME.

Usar archivo de contraseña cifrada gpg Ordenar:

$ gpg -c ~/.mysshpassword

Se le pedirá que ingrese su contraseña en un nuevo cuadro emergente. Ingrese la contraseña dos veces, luego haga clic en Aceptar para cerrar el cuadro.

Elimine el archivo de contraseña de texto sin formato:

$ rm ~/.mysshpassword

Ahora puede ejecutar comandos en la computadora remota con:

$ gpg -d -q ~/.mysshpassword.gpg | sshpass ssh [email protected] uname -a

Tenga en cuenta que el comando anterior no ingresará al sistema remoto. solo se ejecuta»uname -a» comando en el sistema remoto.

Ejemplo 2 – Transferencia de archivos usando Rsync con sshpass

Para transferir archivos del sistema local al sistema remoto utilizando Rsync sobre SSH, ejecute:

$ rsync ~/file.txt --rsh="sshpass -p almalinux ssh -l ostechnix" 192.168.1.20:/home/ostechnix/

También puedes usar -e Las opciones que se muestran en la sección del Ejemplo 1 transfieren archivos de una manera un poco menos reveladora.

$ export SSHPASS=almalinux
$ rsync ~/file.txt --rsh="sshpass -e ssh -l ostechnix" 192.168.1.20:/home/ostechnix/

Ejemplo 3: copia de archivos usando scp y sshpass

Podemos usar sshpass al mismo tiempo scp Comando para copiar archivos entre sistemas locales y remotos en modo no interactivo.

$ scp ~/file.txt --rsh="sshpass -p almalinux ssh -l ostechnix" 192.168.1.20:/home/ostechnix/

Ejemplo 4: automatización de contraseñas SSH usando sshpass en un script de shell

En las secciones anteriores, discutimos cómo usar sshpass para iniciar sesión en un control remoto a través de SSH de forma no interactiva. Ahora veamos cómo usar sshpass para administrar conexiones SSH en un script de shell.

Crea un nuevo script llamado diskusage_sript.sh Contiene lo siguiente.

#!/usr/bin/env bash

#-------------------------------------------------------
#Author: Ostechnix
#Purpose: Report file system disk space usage of remote systems 
#-------------------------------------------------------
SSHPASS=almalinux sshpass -e ssh [email protected] 'df -h'

Ejecute el script con el comando:

$ sh diskusage_sript.sh 

Salida de muestra:

Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       20G  1.4G   18G   8% /
none            492K  4.0K  488K   1% /dev
udev             16G     0   16G   0% /dev/tty
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.6M   16G   1% /run
tmpfs           3.1G     0  3.1G   0% /run/user/1000
Usando sshpass en scripts de shell
Usando sshpass en scripts de shell

Si no desea poner la contraseña en un script de texto sin formato, simplemente puede cifrar el archivo de contraseña con gpg de la siguiente manera Ejemplo 1 parte y reemplace la última línea en el script con la siguiente línea.

gpg -d -q ~/.mysshpassword.gpg | sshpass ssh [email protected] 'df -h'

Después de modificar esa línea, el script real debería verse así:

#!/usr/bin/env bash

#-------------------------------------------------------
#Author: Ostechnix
#Purpose: Report file system disk space usage of remote systems 
#-------------------------------------------------------
gpg -d -q ~/.mysshpassword.gpg | sshpass ssh [email protected] 'df -h'

Consulte la página del manual para obtener más detalles sobre el uso de sshpass.

$ man sshpass

En conclusión

En esta guía, aprendimos qué es sshpass, cómo instalar sshpass en varios sistemas Linux y FreeBSD, cómo usar sshpass para inicios de sesión SSH no interactivos y, finalmente, cómo realizar la automatización de contraseñas SSH en scripts de shell con la ayuda de la utilidad sshpass. Sistema Linux y FreeBSD.

Tenga en cuenta que sshpass no reemplaza los métodos de autenticación basados ​​en claves SSH. Puede usar sshpass en cualquier lugar donde necesite implementar la autenticación basada en contraseña en modo no interactivo.

Como ya advertí, usar sshpass en un sistema compartido es No recomendadoDebido a que la contraseña se registra en el historial del shell, todos los usuarios del sistema pueden verla consultando el archivo de historial de bash.

Si eres el único que usa el sistema, no es gran cosa. Puede usar sshpass para implementar la autenticación SSH automática basada en contraseña.

Referirse a:

LEER  Deskreen le permite duplicar o transmitir la pantalla de su computadora Linux a cualquier dispositivo

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba