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.
Tabla de Contenidos
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 -pssh remoteuser@ip-address
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 [ostechnix@Almalinux8CT ~]$
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
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: