Búsqueda de sitios web

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


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

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

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, de modo que se puedan ejecutar scripts de shell automatizados para realizar copias de seguridad a través del programador cron.

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

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

Instalar sshpass en sistemas Linux

En sistemas basados en RedHat/CentOS, primero debe habilitar el repositorio 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 el código fuente para tener la última versión de sshpass, primero descargar el código fuente y luego extraer el contenido del archivo tar e instalarlo 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 utilizar 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 fines de secuencias de comandos; 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  'df -h' 

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

Sin embargo, para evitar que se muestre la contraseña en la pantalla, puede usar el indicador -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  'df -h' 

Nota: En el ejemplo anterior, la variable de entorno SSHPASS tiene solo un propósito temporal 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 puedes 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  'df -h'

También puede usar sshpass para transferir archivos usando scp o hacer una copia de seguridad/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 un mayor uso, le sugiero que lea la página de manual de sshpass y escriba:

man sshpass

En este artículo, explicamos sshpass una herramienta sencilla que permite la autenticación de contraseña no interactiva. Aunque estas herramientas pueden resultar ú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 futuras discusiones.