Existuje několik vzdálených počítačů s linuxem a musím napsat skript shellu, který bude provádět stejnou sadu příkazů na každém počítači. (Včetně některých sudo operací). Jak to lze provést pomocí skriptování shellu?
Můžete to udělat pomocí ssh, například:
#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
Při ssh'ingu na vzdálený počítač, jak zacházet, když se zobrazí výzva k ověření RSA otiskem prstu.
Můžete přidat StrictHostKeyChecking=no
možnost ssh:
ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
Tím deaktivujete kontrolu hostitelského klíče a automaticky přidáte hostitelský klíč do seznamu známých hostitelů. Pokud nechcete, aby byl hostitel přidán do souboru známých hostitelů, přidejte možnost -o UserKnownHostsFile=/dev/null
.
Upozorňujeme, že tím deaktivujete některé bezpečnostní kontroly , například ochrana proti útoku typu man-in-the-middle. Proto by neměl být používán v prostředí citlivém na zabezpečení.
Nainstalujte sshpass pomocí apt-get install sshpass
poté upravte skript a seřaďte IP adresy, uživatelská jména a hesla svých linuxových strojů v příslušném pořadí. Poté spusťte tento skript. A je to ! Tento skript nainstaluje VLC do všech systémů.
#!/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