sshpass: Inicio de sesión en el servidor SSH / Proporcionar contraseña SSH utilizando una secuencia de comandos de Shell

¿Cómo puedo iniciar sesión en ssh sin usar contraseña de claves públicas RSA/DSA? ¿Cómo uso ssh en un script de shell? ¿Cómo puedo acceder a la autenticación de contraseñas con SSH y shell de forma no interactiva?

Estas son las preguntas que guían este artículo.

Puede utilizar el comando sshpass para proporcionar la contraseña para el inicio de sesión en un servidor via ssh. Esta es una herramienta de autenticación de contraseña ssh no interactiva. Desde la página de manual, nos dice:

Sshpass es una utilidad diseñada para ejecutar ssh utilizando el modo denominado «teclado-interactivo» de autenticación de contraseña, pero en modo no interactivo.

Ssh utiliza el acceso directo de TTY para asegurarse de que la contraseña es efectivamente emitida por un usuario desde el modo de teclado interactivo. Sshpass ejecuta ssh en un tty dedicado, engañándolo pensando que está recibiendo la contraseña de un usuario interactivo.

El comando para ejecutar se especifica después de las propias opciones de sshpass. Normalmente será «ssh» con argumentos, pero también puede ser cualquier otro comando. Sin embargo, la solicitud de contraseña utilizada por ssh está actualmente codificada en sshpass.

Instalar sshpass en Debian / Ubuntu Linux

Escriba el siguiente comando:

$ sudo apt-get install sshpass

La salidad del comando sería algo como lo siguiente:

Instalación de sshpass en Debian / Ubuntu Linux

Instalar sshpass bajo RHEL / CentOS Linux

Primero, habilite el repositorio EPEL y escriba el siguiente comando yum:

$ sudo yum install sshpass

Si está utilizando Fedora Linux, escriba:

$ sudo dnf install sshpass

Instalar sshpass en Arch Linux

$ sudo pacman -S sshpass

Instalar sshpass en OpenSUSE Linux

$ sudo zypper install sshpass

¿Cómo uso sshpass en Linux o Unix?

Inicie sesión en el servidor ssh llamado server.ejemplo.com con la contraseña llamada M7@Shker0bQ:

$ sshpass -p 'M7@Shker0bQ:' ssh username@server.ejemplo.com

Para la secuencia de comandos de shell, es posible que deba desactivar la comprobación de la clave de host:

$ sshpass -p 'M7@Shker0bQ' ssh -o StrictHostKeyChecking=no username@server.ejemplo.com

Advertencia de seguridad: La opción -p debe considerarse la menos segura de todas las opciones de sshpass. Le recomiendo que utilice la autenticación de clave pública de ssh.

Un ejemplo de script de shell bash con SSHPASS

La sintaxis podría ser:

SSHPASS='M7@Shker0bQ' sshpass -e ssh carlos@server.usserver.com
SSHPASS='M7@Shker0bQ' sshpass -e ssh carlos@server.usserver.com date
SSHPASS='M7@Shker0bQ' sshpass -e ssh carlos@server.usserver.com w
SSHPASS='M7@Shker0bQ' sshpass -e ssh -o StrictHostKeyChecking=no carlos@server.usserver.com

La contraseña se pasa como una variable de entorno llamada SSHPASS.

Leer la contraseña del archivo

Otra opción es leer la contraseña del archivo mediante la opción -f. La sintaxis es:

sshpass -f NombreArchivo ssh usuario@servidor

Cree un archivo de la siguiente manera:

$ echo 'myPassword' > myArchivo
$ chmod 0400 myArchivo
$ sshpass -f MyArchivo ssh carlos@server.usserver.com

Ejemplo: ¿Cómo puedo copiar /var/www/html usando rsync?

Ejecute rsync a través de SSH mediante autenticación de contraseña, pasando la contraseña en la línea de comandos:

$ rsync --rsh="sshpass -p myPassword ssh -l username" server.ejemplo.com:/var/www/html/ /backup/

O, de esta otra manera:

$ SSHPASS='suPasswordAqui' rsync --rsh="sshpass -e ssh -l username" server.ejemplo.com:/var/www/html/ /backup/

¿Cómo uso sshpass  con cifrado gpg?

En primer lugar, cree un archivo de la siguiente manera:

$ echo 'mySshPasswordAqui' > .sshpassword

Ahora, encripte un archivo usando el comando gpg:

$ gpg -c .sshpassword
$ rm .sshpassword

Por último, úsalo de la siguiente manera:

$ gpg -d -q .sshpassword.gpg > fifo; sshpass -f fifo ssh carlos@server.usserver.com
Avatar
Carlos Dagorret
CTO Facultad de Ciencias Económicas

My research interests include distributed robotics, mobile computing and programmable matter.

Relacionado

comments powered by Disqus