Hay varias máquinas Linux remotas, y necesito escribir un script de shell que ejecutará el mismo conjunto de comandos en cada máquina. (Incluyendo algunas operaciones sudo). ¿Cómo se puede hacer esto usando secuencias de comandos de shell?
Puedes hacer esto con ssh, por ejemplo:
#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
Cuando ssh'ing a la máquina remota, cómo manejar cuando solicita la autenticación de huellas dactilares RSA.
Puedes agregar el StrictHostKeyChecking=no
opción para ssh:
ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
Esto deshabilitará la verificación de la clave de host y agregará automáticamente la clave de host a la lista de hosts conocidos. Si no desea que se agregue el host al archivo de hosts conocidos, agregue la opción -o UserKnownHostsFile=/dev/null
.
Tenga en cuenta que esto deshabilita ciertos controles de seguridad , por ejemplo, protección contra ataques de intermediarios. Por lo tanto, no debe aplicarse en un entorno sensible a la seguridad.
Instale sshpass usando, apt-get install sshpass
luego edite el script y coloque las direcciones IP, los nombres de usuario y la contraseña de sus máquinas Linux en el orden respectivo. Después de eso, ejecute ese script. Eso es todo ! Este script instalará VLC en todos los sistemas.
#!/bin/bash
SCRIPT="cd Desktop; pwd; echo -e 'PASSWORD' | sudo -S apt-get install vlc"
HOSTS=("192.168.1.121" "192.168.1.122" "192.168.1.123")
USERNAMES=("username1" "username2" "username3")
PASSWORDS=("password1" "password2" "password3")
for i in ${!HOSTS[*]} ; do
echo ${HOSTS[i]}
SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"
done