Pchełki bash: jak uruchomić polecenie w wielu sesjach ssh na raz?

https://xpil.eu/vlIFY

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!

https://xpil.eu/vlIFY

7 komentarzy

      1. 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).

        1. 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.

          1. 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”.

  1. na ile pamięta Multi PuTTY umożliwiał równoczesne wysłanie tej samej sekwencji do wielu sesji.

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.