Es gibt mehrere Remote-Linux-Rechner, und ich muss ein Shell-Skript schreiben, das denselben Befehlssatz auf jedem Rechner ausführt. (Einschließlich einiger Sudo-Operationen). Wie kann dies mit Shell-Scripting erreicht werden?
Sie können dies zum Beispiel mit ssh tun:
#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
Beim SSH-Versand zum Remote-Rechner, wie damit umgegangen wird, wenn er zur Authentifizierung per RSA-Fingerabdruck auffordert.
Sie können den StrictHostKeyChecking=no
hinzufügen Option für ssh:
ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
Dadurch wird die Überprüfung des Hostschlüssels deaktiviert und der Hostschlüssel automatisch zur Liste der bekannten Hosts hinzugefügt. Wenn Sie nicht möchten, dass der Host zur Datei bekannter Hosts hinzugefügt wird, fügen Sie die Option -o UserKnownHostsFile=/dev/null
hinzu .
Beachten Sie, dass dadurch bestimmte Sicherheitsprüfungen deaktiviert werden , zum Beispiel Schutz vor Man-in-the-Middle-Angriffen. Es sollte daher nicht in einer sicherheitssensiblen Umgebung eingesetzt werden.
Installieren Sie sshpass mit apt-get install sshpass
Bearbeiten Sie dann das Skript und bringen Sie die IPs, Benutzernamen und das Passwort Ihrer Linux-Maschinen in die entsprechende Reihenfolge. Führen Sie danach dieses Skript aus. Das ist es ! Dieses Skript installiert VLC auf allen Systemen.
#!/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