Esistono più macchine Linux remote e ho bisogno di scrivere uno script di shell che eseguirà lo stesso set di comandi in ogni macchina. (Incluse alcune operazioni sudo). Come si può fare questo usando lo scripting della shell?
Puoi farlo con ssh, per esempio:
#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
Quando si invia tramite ssh alla macchina remota, come gestire quando viene richiesta l'autenticazione dell'impronta digitale RSA.
Puoi aggiungere il StrictHostKeyChecking=no
opzione per ssh:
ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
Ciò disabiliterà il controllo della chiave dell'host e aggiungerà automaticamente la chiave dell'host all'elenco degli host conosciuti. Se non vuoi che l'host venga aggiunto al file hosts conosciuto, aggiungi l'opzione -o UserKnownHostsFile=/dev/null
.
Tieni presente che questo disabilita alcuni controlli di sicurezza , ad esempio protezione contro l'attacco man-in-the-middle. Non dovrebbe quindi essere applicato in un ambiente sensibile alla sicurezza.
Installa sshpass usando, apt-get install sshpass
quindi modifica lo script e metti gli IP, i nomi utente e la password delle tue macchine Linux nel rispettivo ordine. Dopodiché, esegui quello script. Questo è tutto ! Questo script installerà VLC in tutti i sistemi.
#!/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