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!
A z tego co rozumie, to nie sensownym rozwiązaniem przy takim zastosowaniu, nie było by Ansible ?
Z całą pewnością!
https://kawaly.tja.pl/dowcip,bogaty-dziedzic-przywoluje-handlarza
🙂
Ano. Ansible.
„A co jeżeli takich zdalnych maszyn jest sto? Tysiąc?”
Takie zabawy czasem mają sens jak mamy parę maszyn gdzie potrzebujemy coś zrobić.
Ale przy skali 10+ to już zdecydowanie Ansible (albo coś podobnego).
Akurat dla powyższego przykładu ansible (czy tam inny puppet albo chef) to słaba odpowiedź. Prawilnie jest zdefiniować stan (zainstalowane pakiety w określonych wersjach), niż robić upgrade. Choć oczywiście się da.
Sam upgrade na większej ilości maszyn bez kontroli poprawności instalacji to też słaby pomysł, są dedykowane narzędzia typu apt-dater, który kiedyś opisywałem.
Ale właśnie Ansible nie jest takim narzędziem (nie wiem, nie korzystam, tylko kojarzę narzędzie). Bo z tego co rozumiałem z dotychczasowych materiałów. Ansible jeśli będzie wykorzystywał playbook, i natrafi na problem z jego realizacją to przekaże to do jednostki „sterującej”.
Cześć druga dotyczy prezentowanego rozwiązania, nie ansible.
na ile pamięta Multi PuTTY umożliwiał równoczesne wysłanie tej samej sekwencji do wielu sesji.