Jak uruchomić lokalny skrypt na zdalnym serwerze Linux?
Opublikowany: 2022-09-10Skryptowanie powtarzających się zadań poprawia efektywność administrowania systemem. Świetnie sprawdza się w przypadku maszyn lokalnych, ale co, jeśli będziesz nadzorować serwery zdalne? Czy możesz uruchomić lokalny skrypt na zdalnym komputerze? TAk!
Połączenia zdalne
Zdalne administrowanie systemem zwykle polega na nawiązaniu połączenia ze zdalnym komputerem przez bezpieczne połączenie powłoki . Połączenie SSH udostępnia wiersz polecenia na komputerze zdalnym. Następnie możesz przejść do przodu i wykonać dowolną konserwację systemu.
Skrypty powłoki pomagają, pozwalając na zawinięcie sekwencji poleceń w skrypt, który można uruchomić tak, jakby był programem, łącząc wiele akcji w jedną instrukcję wiersza poleceń.
W miarę upływu czasu dopracujesz i ulepszysz swoje skrypty. Jeśli masz do administrowania wiele zdalnych maszyn, utrzymywanie aktualnej i aktualnej kopii każdego skryptu na każdym serwerze jest uciążliwe i uciążliwe. Samo w sobie staje się zadaniem administracyjnym i pochłania oszczędności czasu, które ma zapewnić korzystanie ze skryptów.
Idealnym rozwiązaniem byłoby przechowywanie skryptów na komputerze lokalnym i uruchamianie ich na komputerach zdalnych przez połączenie SSH. Zapewniłoby to uproszczone zarządzanie dzięki scentralizowanej kolekcji skryptów, a ten sam, aktualny skrypt działa na wszystkich komputerach.
Bash i SSH umożliwiają właśnie to zrobić.
Połączenia SSH bez hasła
Najlepszym sposobem na to jest połączenie bez hasła przy użyciu kluczy SSH. Generując klucze SSH na komputerze lokalnym i wysyłając je do każdego z komputerów zdalnych, możesz bezpiecznie i wygodnie łączyć się z komputerami zdalnymi, bez każdorazowego monitowania o hasło.
Chociaż mogą być onieśmielające dla początkujących użytkowników, klucze SSH naprawdę nie są trudne. Są łatwe do wygenerowania, proste do zainstalowania na zdalnych serwerach i bezproblemowe, gdy używasz ich z SSH. Jedynymi wymaganiami wstępnymi są uruchomione na komputerach zdalnych demon SSH sshd
oraz konto użytkownika na komputerze zdalnym.
Jeśli już przeprowadzasz na nich zdalne administrowanie systemem, oba te wymagania muszą być już spełnione.
Aby wygenerować parę kluczy SSH, wpisz:
ssh-keygen
Jeśli masz konto o nazwie „dave” na komputerze o nazwie „fedora-36.local”, możesz wysłać i zainstalować na nim swój klucz publiczny SSH za pomocą tego polecenia:
ssh-copy-id [email protected]
Teraz nawiązanie połączenia SSH w zwykły sposób spowoduje uwierzytelnienie za pomocą kluczy SSH. Pojawia się wiersz polecenia na zdalnym serwerze bez pytania o hasło.
ssh [email protected]
Zdalne uruchamianie lokalnego skryptu
Na potrzeby tych testów naszym zdalnym serwerem jest komputer z systemem Linux o nazwie „fedora-36.local”. Skonfigurowaliśmy klucze SSH i przetestowaliśmy nasze połączenie bez hasła ze zdalnym serwerem z naszego komputera lokalnego.
Nasz skrypt jest bardzo prosty. Zapisuje znacznik czasu do pliku o nazwie „timestamp.txt” na zdalnym serwerze. Zauważ, że skrypt kończy się poleceniem wyjścia. Jest to ważne, w niektórych starszych systemach możliwe jest wykonanie skryptu do końca, ale połączenie SSH jest utrzymywane otwarte.
#!/kosz/bash data >> znacznik czasu.txt wyjście 0
Skopiuj ten tekst do edytora, zapisz go jako „local.sh”, a następnie użyj chmod
, aby uczynić go wykonywalnym.
chmod +x lokalny.sh
Na naszym lokalnym komputerze uruchomimy skrypt w następujący sposób:
ssh [email protected] 'bash -s' < local.sh
Oto jak to działa.
- ssh [email protected] : Połączenie SSH, które nawiązujemy ze zdalną maszyną. Wykorzystuje to polecenie
ssh
, istniejące konto użytkownika na serwerze zdalnym i adres serwera zdalnego. - 'bash -s' : Powoduje, że Bash odczytuje polecenia ze standardowego strumienia wejściowego. Pozwala Bashowi odczytać przekierowane lub potokowe dane wejściowe.
- < local.sh : Przekierowujemy skrypt do Bash.
Po uruchomieniu skryptu wracamy do wiersza poleceń maszyny lokalnej. Przeskakując do naszej zdalnej maszyny, możemy użyć cat, aby zajrzeć do pliku „timestamp.txt”.
datownik kota.txt
Widzimy znacznik czasu ostatniego — i obecnie jedynego — połączenia. Kilkakrotne uruchomienie skryptu lokalnego powoduje dodanie odpowiednich znaczników czasu do pliku zdalnego.
datownik kota.txt
Oczywiście w rzeczywistej sytuacji twój skrypt zrobiłby coś bardziej przydatnego. Ale nawet nasz trywialny przykład pokazuje, że lokalny skrypt jest wykonywany na zdalnym serwerze.
Przekazywanie argumentów do skryptu
Do skryptu można przekazać argumenty wiersza poleceń. Zmodyfikujemy nasz skrypt, aby oczekiwał trzech parametrów wiersza poleceń. Są one przekierowywane do pliku „timestamp.txt” wraz ze znacznikiem czasu.
Zapisz ten skrypt jako „local2.sh” i uczyń go wykonywalnym za pomocą chmod
.
#!/kosz/bash echo "$1 $2$3" >> timestamp.txt data >> znacznik czasu.txt wyjście 0
Polecenie, którego musimy użyć, jest podobne do poprzedniego przykładu, z kilkoma zmianami.
ssh [email protected] "bash -s" -- < local2.sh "How-To\ Geek" "Linux" "Artykuły"
Podwójny myślnik „ --
” mówi Bashowi, że to, co następuje, nie powinno być traktowane jako parametry wiersza poleceń dla polecenia ssh
. Trzy parametry skryptu, jak zwykle, następują po nazwie skryptu. Zauważ, że użyliśmy odwrotnego ukośnika „ \
”, aby uciec od spacji w parametrze „How-To\ Geek”.
Za pomocą cat
możemy sprawdzić, czy nasze parametry zostały odebrane i poprawnie obsłużone na zdalnym serwerze.
datownik kota.txt
Zdalne uruchamianie sekcji skryptu
Jeśli masz skrypt, który wymaga lokalnego przetwarzania w celu określenia, jakie działania mogą być wymagane na zdalnych serwerach, możesz dodać sekcję bezpośrednio do tego skryptu, aby wykonać zdalne działania za Ciebie.
Możemy to osiągnąć, korzystając z tych dokumentów. Tutaj dokumenty pozwalają nam przekierować wiersze z oznaczonej sekcji skryptu do polecenia. Przetwarzanie lokalne można wykonać powyżej i poniżej dokumentu tutaj.
To jest skrypt „local3.sh”, który zawiera tutaj dokument.
#!/kosz/bash # lokalne przetwarzanie można wykonać tutaj # zdalne przetwarzanie odbywa się tutaj ssh -T [email protected] << _zdalne_polecenia # polecenia do zdalnego uruchamiania zostaną dodane tutaj cd /home/dave/Dokumenty # itd. # Na koniec zaktualizuj plik znacznika czasu echo "Script3.sh:" $(data) >> /home/dave/timestamp.txt # to jest etykieta oznaczająca koniec przekierowania _zdalne_polecenia # więcej lokalnego przetwarzania można wykonać tutaj wyjście 0
Używamy polecenia ssh
z tymi samymi szczegółami połączenia, co poprzednio. Łączymy się jako użytkownik „dave” na zdalnym serwerze o nazwie „fedora-36.local”. Używamy również opcji -T
(wyłącz alokację pseudoterminalu). Uniemożliwia to zdalnemu serwerowi udostępnienie interaktywnego terminala dla tego połączenia.
Po przekierowaniu „ <<
” następuje nazwa etykiety . W tym przykładzie używamy „_remote_commands”. W tej wytwórni nie ma nic szczególnego, to po prostu etykieta.
Wszystkie polecenia pojawiające się w wierszach następujących po przekierowaniu są wysyłane przez połączenie SSH. Przekierowanie zatrzymuje się po napotkaniu etykiety. Wykonanie skryptu jest następnie kontynuowane z linią następującą po etykiecie.
Uruchommy nasz mieszany skrypt przetwarzania lokalnego/zdalnego.
./lokalny3.sh
Zgodnie z oczekiwaniami widzimy nowy wpis w pliku „timestamp.txt”.
datownik kota.txt
Rozszerz swój zasięg
Możliwość zdalnego uruchamiania skryptów — które są pisane, przechowywane i utrzymywane lokalnie — zapewnia wygodne narzędzie administracyjne. Wiedza, że dokładnie ta sama wersja skryptu działa na wszystkich zdalnych serwerach, znacznie ułatwia zarządzanie.
POWIĄZANE: Jak zarządzać serwerami Linux za pomocą interfejsu internetowego kokpitu