Pchełki bash: jak uruchomić polecenie w wielu sesjach ssh na raz?
Mamy, dajmy na to, 10 maszyn dostępnych przez ssh, na których chcemy wykonać tą samą komendę. Na przykład, bo ja wiem, apt update; apt -y upgrade
Można się zalogować na każdą z nich z osobna i wykonać komendę ręcznie.
A co jeżeli takich zdalnych maszyn jest sto? Tysiąc?
Najpierw musimy się upewnić, że mamy skonfigurowane logowanie bez hasła (czyli kluczem). A więc dla każdej maszyny uruchmiamy (niestety, o ironio, ręcznie): ssh-copy-id user@komp1.domena.com i tak dalej.
(Pewnie ten krok też się jakoś da zautomatyzować - zwinnego Czytelnika proszę o komentarz)
Od tej pory można logować się do każdej z maszyn bez hasła. Oznacza to, że możemy teraz wykonać jakąś komendę na wielu maszynach na raz.
Zaczynamy od zainstalowania aplikacji pdsh (każdy po swojemu, na przykład apt install pdsh).
Potem tworzymy sobie plik tekstowy z nazwami zdalnych maszyn (jedna na wiersz):
host1.domena.com
host2.domena.com
host3.domena.com
No i teraz wystarczy uruchomić:
pdsh -R ssh -l user -w $(cat hosts.txt | paste -sd "," -) "nasza komenda np apt update czy coś"
Ten kawałek w nawiasie konwertuje w locie zawartość hosts.txt z pionowej na poziomą (z przecinkami), czyli robi takiego jakby, za przeproszeniam, pivota. Opcja -l user mówi poleceniu pdsh, żeby logowało się na użytkownika user. Opcja -R ssh mówi, że używamy protokołu ssh. Wreszcie na końcu, w cudzysłowiach, wpisujemy treść komendy do wykonania.
Smacznego!
Komentarze