Resumen
Los administradores del sistema Linux normalmente inician sesión en los servidores Linux proporcionando una contraseña o usando autenticación basada en claves. sshpass es una herramienta que nos permite proporcionar automáticamente contraseñas al símbolo del sistema para que los usuarios puedan ejecutar scripts automatizados según lo deseen. sshpass proporciona la contraseña al aviso de ssh usando tty dedicado, engañando a ssh para que crea que un usuario interactivo está proporcionando una contraseña.
Algunos de los usos comunes de sshpass
1. llevar copias de seguridad a un servidor remoto
2. ejecutar comandos en los sistemas en un momento específico.
Instalación de sshpass
1. Distribuciones basadas en Centos:
Configure el repositorio EPEL desde https://fedoraproject.org/wiki/EPEL y luego, como root, ejecute:
# yum -y install sshpass
2. Distribuciones basadas en Ubuntu/Debain:
Como root ejecute:
# apt-get install sshpass
3. Compile e instale desde la fuente:
# wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz # tar -zxvf sshpass.tar.gz # cd sshpass-1.05/ # ./configure # make # make install # which sshpass /usr/local/bin/sshpass
Obtención de ayuda
# 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
Se debe usar como máximo uno de -f, -d, -p o -e
Ejemplo 1:proporcionar contraseña con ssh
# sshpass -p 'password' ssh ldap.thegeekdiary.com -l root -o StrictHostKeyChecking=no
donde:
contraseña es la contraseña de su servidor (ldap.thegeekdiary.com). ‘StrictHostKeyChecking=no ‘ se utiliza para controlar los inicios de sesión en máquinas cuya clave de host no se conoce o ha cambiado.
EJEMPLO:2 PARA EJECUTAR ALGÚN COMANDO EN EL SERVIDOR REMOTO VIZ COMPROBAR EL TIEMPO DE ACTIVIDAD Y NOMBRE
Ejemplo 2:Para ejecutar algún comando en el servidor remoto
Intentemos ejecutar 2 comandos "uptime" y "uname" en el servidor remoto usando el comando sshpass:
# sshpass -p 'password' ssh ldap.thegeekdiary.com -l root -o StrictHostKeyChecking=no "uptime;uname -a"
Salida de muestra:
18:49:34 up 21 days, 18:49, 3 users, load average: 0.01, 0.00, 0.00 Linux ldap.thegeekdiary.com 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux
Ejemplo 3:Copiar un archivo usando rsync a un servidor
En nuestro caso estamos copiando un archivo sshpass.tar.gz a un servidor remoto ldap.thegeekdiary.com
# sshpass -p 'password' rsync -av --progress sshpass.tar.gz root@ldap.thegeekdiary.com:/tmp/
Salida del Comando anterior:
sending incremental file list sshpass.tar.gz 98362 100% 62.56MB/s 0:00:00 (xfer#1, to-check=0/1) sent 98472 bytes received 31 bytes 197006.00 bytes/sec total size is 98362 speedup is 1.00 root@server1:/home/thegeekdiary#
Ejemplo 4:bucle for para copiar en servidores remotos
Cree un archivo como el siguiente:
# touch /tmp/scr
El archivo debe contener el nombre de los hosts:
server2.thegeekdiary.com server3.thegeekdiary.com server4.thegeekdiary.com server5.thegeekdiary.com
# for i in `cat /tmp/scr`; do echo " ";echo "###$i####"; sshpass -p 'password' rsync -av --progress sshpass.tar.gz root@$i:/tmp/; done
Salida del comando anterior:
###server2.thegeekdiary.com#### sending incremental file list sent 54 bytes received 12 bytes 132.00 bytes/sec total size is 98362 speedup is 1490.33 ###server3.thegeekdiary.com#### sending incremental file list sent 54 bytes received 12 bytes 44.00 bytes/sec total size is 98362 speedup is 1490.33 ###server4.thegeekdiary.com#### sending incremental file list sent 54 bytes received 12 bytes 132.00 bytes/sec total size is 98362 speedup is 1490.33 ###server5.thegeekdiary.com#### sending incremental file list sent 54 bytes received 12 bytes 132.00 bytes/sec total size is 98362 speedup is 1490.33