Automatyzuję proces wdrażania i chcę mieć możliwość wywołania jednego pliku .sh na moim komputerze, wykonania przez niego kompilacji i przesłania pliku .zip na serwer, a następnie zrobienia wielu rzeczy na serwerze. Jedna z rzeczy, które muszę zrobić, wymaga bycia rootem. Tak więc chcę to zrobić:
ssh user@172.1.1.101 <<END_SCRIPT
su -
#password... somehow...
#stop jboss
service server_instance stop
#a bunch of stuff here
#all done!
exit
END_SCRIPT
Czy to w ogóle możliwe?
Odpowiedzi:
Czy zamiast tego zastanawiałeś się nad sudo bez hasła?
źródło
Zamiast su, użyj sudo z ustawionym NOPASSWD w sudoers dla odpowiednich poleceń. Będziesz chciał ograniczyć dozwoloną liczbę poleceń. Uruchamianie skryptu dla poleceń root może być najczystszym i zdecydowanie najłatwiejszym sposobem na zapewnienie bezpieczeństwa, jeśli nie znasz składni plików sudoer. W przypadku poleceń / skryptów, które wymagają załadowania pełnego środowiska,
sudo su - -c command
działa, choć może to być przesada.źródło
To, co opisujesz, może być możliwe z oczekiwaniami .
źródło
Możesz przekazać polecenie jako argument do SSH, aby po prostu uruchomić to polecenie na serwerze, a następnie wyjść:
Działa to również w przypadku listy wielu poleceń:
Lub alternatywnie:
Jak zauważyli wcześniej inni użytkownicy, uruchomienie
su
na serwerze uruchomi nową powłokę zamiast wykonywać kolejne polecenia w skrypcie jako root. Co trzeba zrobić, to użyć jednejsudo
lubsu -c
i alokacja siły TTY do SSH z-t
przełącznikiem (wymagany, jeśli trzeba wpisać hasło roota):Podsumowując, jednym ze sposobów osiągnięcia tego, co chcesz zrobić, byłoby:
Ponieważ
sudo
zazwyczaj zapamiętuje poziom autoryzacji przez kilka minut, zanim ponownie poprosisz o hasło roota, po prostu przygotowując sięsudo
do wszystkich poleceń, które musisz uruchomić jako root, jest to prawdopodobnie najłatwiejszy sposób uruchamiania poleceń jako root na serwerze. DodanieNOPASSWD
reguły dla użytkownika/etc/sudoers
sprawi, że proces będzie jeszcze płynniejszy.Mam nadzieję, że to pomoże :-)
źródło
NOPASSWD
reguły, sprawdź przykłady na doleman sudoers
. Pamiętaj też, aby używać govisudo
podczas edycjisudoers
pliku, aby uniknąć uszkodzenia!su -c
zamiastsudo
, powinieneś uruchomić SSH z-t
flagą - podczas wykonywania polecenia zostaniesz poproszony o podanie hasła roota na serwerze. Zapewnienie hasło bezpośredniosu
jako argument wiersza poleceń nie jest ani wspierany (o ile wiem), ani zalecane - od prostegops -ef | grep su
ujawnia wszystkie argumenty przekazywane dosu
, w tym jakiekolwiek hasło podane z linii poleceń ...su -c
przez SSH:ssh -t user@host 'su -lc "
<br />echo this is a test
<br />echo this is another test
<br />"
<br />'
<br />
powyższe nowymi wierszami w skrypcie. Off-topic: Czy możesz dodawać nowe wiersze do komentarzy ServerFault? Byłoby to bardzo przydatne przy publikowaniu fragmentów kodu ...Nie. Nawet jeśli dostaniesz hasło
su
, nadal musisz poradzić sobie z faktem, żesu
otworzy się nowa powłoka, co oznacza, że twoje dalsze polecenia nie zostaną jej przekazane. Będziesz musiał napisać skrypt dla operacji root wraz z plikiem wykonywalnym pomocnika, który może go wywołać z odpowiednimi uprawnieniami.źródło
Napisz skrypt oczekiwań. Wiem, że już znalazłeś odpowiedź na to pytanie, ale może to być pomocne, jeśli musisz zalogować się na kilka serwerów, które wymagają interaktywnego wprowadzania hasła.
Jest to język oparty na TCL, więc może być nieco dziwny w porównaniu do zwykłych starych skryptów powłoki. Ale obsługuje automatyzację wprowadzania tekstu i, jak się domyślacie, „oczekuje” pewnych fragmentów danych wyjściowych przed wprowadzeniem jakiegokolwiek rodzaju automatycznego wprowadzania hasła lub eskalacji uprawnień.
Oto dobry link jako przewodnik: http://bash.cyberciti.biz/security/expect-ssh-login-script/
Na wypadek awarii strony:
źródło
Wiem, że to trochę za późno, ale osobiście użyłbym Net :: SSH :: Expect, dostępny z CPAN.
http://search.cpan.org/~bnegrao/Net-SSH-Expect-1.09/lib/Net/SSH/Expect.pod
źródło
Możesz użyć 'ssh example.com su -lc "$ cmd".
Gdy polecenie zawiera opcje, musisz je zacytować, w przeciwnym razie „su” może je zjeść („su: nieprawidłowa opcja -„ A ”).
źródło