Szukam sposobu na przeniesienie konfiguracji z jednego komputera centralnego na kilka komputerów zdalnych bez potrzeby instalowania czegokolwiek na komputerach zdalnych.
Celem jest zrobienie czegoś takiego, jak w przypadku narzędzi takich jak cfengine
, ale na zestawie komputerów, na których nie skonfigurowano agentów. To może być dobra technika konfigurowania cfagent
na zestawie istniejących zdalnych komputerów.
ssh
configuration
bash
scripting
tremoloqui
źródło
źródło
Odpowiedzi:
Możesz przekazać skrypt i wykonać go efemerycznie, przesyłając go i wykonując powłokę.
na przykład
Oczywiście
"ls -l; echo 'Hello World'"
część można zastąpić skryptem bash przechowywanym w pliku na komputerze lokalnym.na przykład
Twoje zdrowie!
źródło
Można to zrobić na kilka sposobów.
1:
2:
3:
numer 3 to mój preferowany sposób, pozwala on na interaktywne polecenia np
su -S service nginx restart
(# 1 wykorzysta resztę skryptu jako dane wejściowe do pytania o hasło podczas korzystania
su -S
).źródło
Polecam do tego celu sieć Pythona:
Aby rozpocząć, powinieneś móc skorzystać z powyższego. Zajrzyj do doskonałej dokumentacji Fabric, aby zrobić resztę. Jako uzupełnienie można całkowicie napisać skrypt w programie Fabric - nie trzeba go kopiować, należy jednak pamiętać, że aby zmienić skrypt na wszystkich komputerach, wystarczy edytować kopię lokalną i ponownie wdrożyć. Co więcej, przy nieco więcej niż podstawowym użyciu interfejsu API, możesz zmodyfikować skrypt w oparciu o host, na którym jest on aktualnie uruchomiony i / lub inne zmienne. To coś w rodzaju pythonicznego oczekiwania.
źródło
run
isudo
), nie jest nawet potrzebne.Właśnie do tego służy Ansible. Nie ma agenta, wystarczy utworzyć plik tekstowy o nazwie:
z treściami, które wyglądają mniej więcej tak:
Określiłoby to, że maszyny „web1, web2 ... web8” znajdują się w grupie „webhosts”. Następnie możesz robić takie rzeczy jak:
zrestartować usługę apache2 na wszystkich twoich komputerach, używając sudo.
Możesz wykonywać polecenia w locie, takie jak:
lub możesz uruchomić skrypt lokalny na zdalnym komputerze:
lub możesz utworzyć podręcznik (poszukaj szczegółów w dokumentacji) z pełną konfiguracją, którą chcesz, aby Twoje serwery były zgodne i wdrożyć za pomocą:
Zasadniczo możesz zacząć używać go jako narzędzia wiersza poleceń do uruchamiania poleceń na wielu serwerach i rozszerzyć jego użycie do kompletnego narzędzia konfiguracyjnego, jeśli uznasz to za stosowne.
źródło
ansible webhosts -m script script.sh
Jak wyjaśniono w tej odpowiedzi , możesz użyć heredoc :
Musisz być ostrożny z heredoc, ponieważ po prostu wysyła tekst, ale tak naprawdę nie czeka na odpowiedź. Oznacza to, że nie będzie czekać na wykonanie poleceń.
źródło
Odpowiedź tutaj ( https://stackoverflow.com/a/2732991/4752883 ) działa świetnie, jeśli próbujesz uruchomić skrypt na zdalnym komputerze z systemem Linux za pomocą
plink
lubssh
. Będzie działać, jeśli skrypt ma wiele wierszylinux
.** Jednak jeśli próbujesz uruchomić skrypt wsadowy znajdujący się na
linux/windows
komputerze lokalnym , a Twój komputer zdalny jest w stanieWindows
, i składa się z wielu wierszy przy użyciu **plink root@MachineB -m local_script.bat
to nie zadziała.
Zostanie wykonana tylko pierwsza linia skryptu. Jest to prawdopodobnie ograniczenie
plink
.Rozwiązanie 1:
Aby uruchomić wielowierszowy skrypt wsadowy (zwłaszcza jeśli jest stosunkowo prosty i składa się z kilku wierszy):
Jeśli oryginalny skrypt partii jest następujący
możesz łączyć linie razem za pomocą separatora „&&” w następujący sposób w swoim
local_script.bat
pliku w następujący sposób https://stackoverflow.com/a/8055390/4752883 :Po tej zmianie możesz uruchomić skrypt, jak wskazano tutaj przez @ JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883
Rozwiązanie 2:
Jeśli skrypt wsadowy jest stosunkowo skomplikowany, może być lepiej użyć skryptu wsadowego, który zawiera polecenie plink, a także następujące czynności, jak wskazano tutaj @Martin https://stackoverflow.com/a/32196999/4752883 :
źródło
Dlaczego nie po prostu najpierw skopiować skrypt, a następnie go uruchomić?
Oczywiście powinieneś uważać, aby nie przesłać go do miejsca, w którym można pisać na całym świecie, aby nikt inny nie mógł nim manipulować przed uruchomieniem go (prawdopodobnie jako root).
źródło
Przepisz skrypt w taki sposób, że każda komenda w nim jest już poprzedzona ssh, a nazwa hosta / ip lub lista takich jest przekazywana do skryptu jako argument (zakładając, że masz skonfigurowane uwierzytelnianie bez hasła / ssh-agent). Może być konieczne trochę pracy, aby poprawnie przekazać kody błędów / zwrotów z poleceń zdalnych ....
źródło
Jeśli skrypt nie jest zbyt duży, a używasz bash lub ksh ...
Zarówno stdin, jak i stdout działają poprawnie, ale skrypt jest ograniczony do wielkości argumentu (zwykle około 100k). Argumenty skryptu mogą działać na końcu wiersza, prawdopodobnie po dodatkowym argumencie „-”. „-T” do przydzielenia pty jest opcjonalne.
Uwaga: To myli ukończenie bashu, nie naciskaj klawisza Tab.
źródło