sshpass: una excelente herramienta para el inicio de sesión SSH no interactivo: nunca lo use en el servidor de producción


En la mayoría de los casos, los administradores de sistemas de Linux inician sesión en servidores remotos de Linux utilizando SSH, ya sea proporcionando una contraseña o iniciando sesión sin contraseña de SSH, o la autenticación de SSH basada en clave.

¿Qué sucede si desea proporcionar una contraseña junto con nombre de usuario al mensaje SSH? aquí es donde sshpass viene a rescatar.

sshpass es una herramienta de línea de comandos simple y liviana que nos permite proporcionar una contraseña (autenticación de contraseña no interactiva) al símbolo del sistema en sí, para que se puedan ejecutar scripts de shell automatizados para realizar copias de seguridad a través del programador cron.

ssh utiliza el acceso directo a TTY para asegurarse de que la contraseña sea realmente proporcionada por un usuario de teclado interactivo. Sshpass ejecuta ssh en un tty dedicado, lo engaña al creer que está recibiendo la contraseña de un usuario interactivo.

rojo

Instalar sshpass en sistemas Linux

En los sistemas basados ​​en RedHat/CentOS , primero debe habilitar el repositorio de Epel en su sistema para instalarlo usando el comando yum como se muestra.

# yum install sshpass
# dnf install sshpass    [On Fedora 22+ versions]

En Debian/Ubuntu y sus derivados, puede instalarlo usando el comando apt-get como se muestra.

$ sudo apt-get install sshpass

Alternativamente, puede instalar desde la fuente para tener la última versión de sshpass , primero descargue el código fuente y luego extraiga el contenido del archivo tar e instálelo así:

$ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
$ tar -xvf sshpass.tar.gz
$ cd sshpass-1.06
$ ./configure
# sudo make install 

Cómo usar sshpass en Linux

sshpass se usa junto con ssh , puede ver todas las opciones de uso de sshpass con descripciones completas emitiendo el siguiente comando:

$ sshpass -h

sshpass Help

Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Como mencioné anteriormente, sshpass es más confiable y útil para propósitos de scripting, considere los siguientes comandos de ejemplo.

Inicie sesión en el servidor ssh de Linux remoto (10.42.0.1) con el nombre de usuario y la contraseña y verifique el uso del disco del sistema de archivos del sistema remoto como se muestra.

$ sshpass -p 'my_pass_here' ssh [email protected] 'df -h' 

rojo

Sin embargo, para evitar mostrar la contraseña en la pantalla, puede usar la marca -e e ingresar la contraseña como un valor de la variable de entorno SSHPASS como se muestra a continuación:

$ export SSHPASS='my_pass_here'
$ echo $SSHPASS
$ sshpass -e ssh [email protected] 'df -h' 

rojo

Para configurar permanentemente la variable de entorno SSHPASS , abra el archivo /etc/profile y escriba la declaración de exportación al principio del archivo:

export SSHPASS='my_pass_here'

Guarde el archivo y salga, luego ejecute el siguiente comando para efectuar los cambios:

$ source /etc/profile 

Por otro lado, también puede usar la marca -f y colocar la contraseña en un archivo. De esta manera, puede leer la contraseña del archivo de la siguiente manera:

$ sshpass -f password_filename ssh [email protected] 'df -h'

También puede usar sshpass para transferir archivos usando scp o respaldar/sincronizar archivos a través de rsync usando SSH como se muestra:

------- Transfer Files Using SCP ------- 
$ scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
$ rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

Para mayor uso, le sugiero que lea la página del manual de sshpass , escriba:

$ man sshpass

En este artículo, explicamos sshpass una herramienta simple que habilita la autenticación de contraseña no interactiva. Aunque, estas herramientas pueden ser útiles, se recomienda encarecidamente utilizar el mecanismo de autenticación de clave pública más seguro de ssh.

Por favor, deje una pregunta o comentario a través de la sección de comentarios a continuación para cualquier discusión adicional.