Mam dwa pytania:
- Istnieje wiele zdalnych maszyn linuxowych i muszę napisać skrypt powłoki, który będzie wykonywał ten sam zestaw poleceń na każdej maszynie. (W tym niektóre operacje sudo). Jak można to zrobić za pomocą skryptów powłoki?
- Podczas łączenia się z komputerem zdalnym, jak postępować, gdy pojawi się monit o uwierzytelnienie odcisków palców RSA.
Zdalne maszyny to maszyny wirtualne tworzone w biegu, a ja mam tylko ich adresy IP. Nie mogę więc wcześniej umieścić pliku skryptu na tych maszynach i uruchomić ich z mojego komputera.
expect
„oczekiwać” ? hasło: „Odpowiedzi:
Możesz to zrobić za pomocą ssh, na przykład:
Możesz dodać
StrictHostKeyChecking=no
opcję do ssh:Spowoduje to wyłączenie sprawdzania klucza hosta i automatyczne dodanie klucza hosta do listy znanych hostów. Jeśli nie chcesz, aby host był dodawany do pliku znanych hostów, dodaj opcję
-o UserKnownHostsFile=/dev/null
.Należy pamiętać, że powoduje to wyłączenie niektórych kontroli bezpieczeństwa , na przykład ochrony przed atakiem typu man-in-the-middle. Dlatego nie należy go stosować w środowisku wrażliwym na bezpieczeństwo.
źródło
ssh
z dowolnego skryptu powłokiIstnieje wiele sposobów radzenia sobie z tym.
Moim ulubionym sposobem jest zainstalowanie http://pamsshagentauth.sourceforge.net/ na zdalnych systemach, a także własnego klucza publicznego. (Znajdź sposób na zainstalowanie tych plików na maszynie wirtualnej, w jakiś sposób masz zainstalowany cały system Unix, co to jest jeszcze kilka plików?)
Po przekazaniu agenta ssh możesz teraz zalogować się do każdego systemu bez hasła.
A nawet lepiej, ten moduł pam uwierzytelni się dla sudo z twoją parą kluczy ssh, dzięki czemu możesz uruchomić z uprawnieniami roota (lub dowolnego innego użytkownika) w razie potrzeby.
Nie musisz martwić się o interakcję z kluczem hosta. Jeśli dane wejściowe nie pochodzą z terminala, ssh ograniczy po prostu możliwość przekazywania agentów i uwierzytelniania za pomocą haseł.
Powinieneś także zajrzeć do pakietów takich jak Capistrano. Zdecydowanie rozejrzyj się po tej witrynie; zawiera wprowadzenie do zdalnego skryptowania.
Poszczególne wiersze skryptu mogą wyglądać mniej więcej tak:
źródło
Zainstaluj sshpass za pomocą,
apt-get install sshpass
a następnie edytuj skrypt i umieść adresy IP, nazwy użytkowników i hasła swoich maszyn z systemem Linux w odpowiedniej kolejności. Następnie uruchom ten skrypt. Otóż to ! Ten skrypt zainstaluje VLC we wszystkich systemach.źródło
Jeśli potrafisz napisać kod w Perlu, powinieneś rozważyć użycie Net :: OpenSSH :: Parallel .
Byłbyś w stanie w deklaratywny sposób opisać akcje, które muszą zostać uruchomione na każdym hoście, a moduł zajmie się wszystkimi przerażającymi szczegółami.
sudo
Obsługiwane jest również uruchamianie poleceń .źródło
Ta praca dla mnie.
Składnia: ssh -i pemfile.pem nazwa_użytkownika @ adres_ip 'command_1; polecenie 2; polecenie 3 '
źródło
Do tego typu zadań wielokrotnie używam Ansible, który pozwala na spójne kopiowanie skryptów bash w kilku kontenerach lub maszynach wirtualnych. Ansible (a dokładniej Red Hat ) ma teraz dodatkowy interfejs sieciowy AWX, który jest wersją open source ich komercyjnej wersji Tower.
Ansible: https://www.ansible.com/
AWX: https://github.com/ansible/awx
Ansible Tower: produkt komercyjny, prawdopodobnie najpierw odkryjesz darmowy AWX o otwartym kodzie źródłowym, a nie 15-dniowy darmowy szlak wieży
źródło
Istnieje wiele sposobów wykonywania poleceń lub skryptów na wielu zdalnych komputerach z systemem Linux. Jednym prostym i najłatwiejszym sposobem jest użycie pssh (równoległy program ssh)
pssh : to program do równoległego wykonywania ssh na wielu hostach. Udostępnia funkcje, takie jak wysyłanie danych wejściowych do wszystkich procesów, przekazywanie hasła do ssh, zapisywanie danych wyjściowych do plików i przekroczenie limitu czasu.
Przykład i zastosowanie:
połącz się z hostami host1 i host2 i wydrukuj „hello, world” z każdego z nich:
Uruchamiaj polecenia za pomocą skryptu na wielu serwerach:
Użyj i uruchom polecenie bez sprawdzania lub zapisywania kluczy hosta:
Jeśli plik hosts.txt zawiera dużą liczbę wpisów, powiedzmy 100, wówczas opcję równoległości można również ustawić na 100, aby zapewnić równoczesne uruchamianie poleceń:
Opcje :
-I : Odczytuje wejście i wysyła do każdego procesu ssh.
-P: Nakazuje pssh wyświetlić wyjście, gdy nadejdzie.
-h: Czyta plik hosta.
-H: [użytkownik @] host [: port] dla pojedynczego hosta.
-i: Wyświetla standardowe wyjście i błąd standardowy po zakończeniu każdego hosta
-x args: Przekazuje dodatkowe argumenty wiersza poleceń SSH
-o opcja: Można jej użyć do podania opcji w formacie użytym w pliku konfiguracyjnym. (/ etc / ssh / ssh_config ) (~ / .ssh / config)
-p paralelizm: użyj podanej liczby jako maksymalnej liczby jednoczesnych połączeń
-q Tryb cichy: powoduje, że większość komunikatów ostrzegawczych i diagnostycznych jest pomijana.
-t: Przekracza limit czasu połączeń po określonej liczbie sekund. 0 oznacza, że pssh nie przekroczy limitu czasu połączeń
Wyłącz StrictHostKeyChecking, aby obsłużyć monit uwierzytelniania RSA.
-o StrictHostKeyChecking = nie
Źródło : man pssh
źródło
To zadziałało dla mnie. Zrobiłem funkcję. Umieść to w swoim skrypcie powłoki:
Jeśli masz wiele komputerów, na których chcesz wykonać to samo polecenie, powtórz ten wiersz ze średnikiem. Na przykład, jeśli masz dwie maszyny, zrobiłbyś to:
Zastąp USER nazwą użytkownika komputera. Zastąp HOST nazwą komputera. Zastąp COMMAND poleceniem, które chcesz wykonać na komputerze.
Mam nadzieję że to pomoże!
źródło
Możesz zastosować to podejście:
źródło