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 del sistema Linux inician sesión en servidores Linux remotos utilizando SSH, ya sea proporcionando una contraseña, o un inicio de sesión SSH sin contraseña o autenticación SSH basada en claves.

¿Qué sucede si desea proporcionar una contraseña junto con el nombre de usuario para el 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í, de modo que se puedan ejecutar scripts de shell automatizados para realizar copias de seguridad a través del programador cron.

ssh utiliza acceso directo a TTY para asegurarse de que la contraseña la proporcione realmente un usuario de teclado interactivo. Sshpass ejecuta ssh en un tty dedicado, engañarlo haciéndole creer que está recibiendo la contraseña de un usuario interactivo.

Importante: El uso de sshpass se considera menos seguro, ya que revela la contraseña a todos los usuarios del sistema en la línea de comandos con un simple comando "ps". Recomiendo encarecidamente utilizar la autenticación sin contraseña SSH.

Instale sshpass en sistemas Linux

En los sistemas basados en RedHat/CentOS, primero necesita 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
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é antes, sshpass es más confiable y útil para propósitos de scripting, considere los comandos de ejemplo a continuación.

Inicie sesión en el servidor ssh remoto de Linux (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' 

Importante: Aquí, la contraseña se proporciona en la línea de comando, que es prácticamente insegura y no se recomienda usar esta opción.

Sin embargo, para evitar que se muestre 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' 

Nota: En el ejemplo anterior, la variable de entorno SSHPASS es solo para fines temporales y se eliminará durante el reinicio.

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 el indicador -f y poner 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 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 de manual de sshpass, escriba:

$ man sshpass

En este artículo, explicamos sshpass, una herramienta simple que permite 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.