Mam interaktywny skrypt powłoki, który w jednym miejscu musi ssh do innej maszyny (opartej na Ubuntu) i wykonać coś jako root (użytkownik powinien wprowadzić swoje hasło, ale zdalne polecenie powinno działać tak, jak podano w skrypcie):
# ...
ssh remote-machine 'sudo ls'
# ...
Zawsze jednak otrzymuję ten komunikat o błędzie:
sudo: no tty present and no askpass program specified
OK, to całkiem jasne. Ale jak mogę to obejść? Coś takiego powinno się zdarzyć:
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
ls
dane wyjściowe będą zawierać na przykład \ r \ n zakończenia.ls | cat
zrobi - zobaczy, że stdout jest fajką. W tym konkretnym pytaniu nie ma to znaczenia, ponieważ najwyraźniej ma on być uruchamiany interaktywnie z terminala - więc prawdopodobnie chcesz kolumny i kolory i tak dalej.Ta metoda uruchomi pojedynczy skrypt używający sudo po ssh:
Załóżmy, że mamy „zdalnego” użytkownika z możliwościami sudo i mamy skrypt, który chcemy, aby był wykonywany jako root.
1) Ustaw skrypt w / etc / passwd, który będzie używany podczas logowania:
remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh
2) Wewnątrz „login.sh” wykonujemy skrypt, który chcemy uruchomić jako „sudo”:
Zwykle dwukrotnie poprosi o hasło: ssh login + sudo. Jeśli chcesz wprowadzić go tylko raz, wypróbuj sudo bez hasła (niezalecane). <- przeczytaj komentarz Boldewyn.
Główną zaletą jest to, że „ssh” nie wymaga żadnych innych parametrów (as -t), a sudo jest wymuszane po stronie serwera. Ponadto, po zakończeniu skryptu, użytkownik jest również wylogowany.
Może nie jest tak elegancki, ale jest prosty i działa.
źródło
sudoers
pliku na serwerze takim jak ten jest katastrofą, na którą czeka. Jeśli ktoś uzyska dostęp jako użytkownik (np. Przez serwer WWW), może natychmiast zostać rootem. Dziękuję, ale szukałem rozwiązań, które nie stawiają sprzeczności w konfiguracji serwera. Gdybyś miał rozwiązanie, które w magiczny sposób ponownie wykorzystuje uwierzytelnianie z SSH dlasudo
polecenia, byłbym bardziej zainteresowany (i być może zacząłbym szukać zamienników dla SSH ...).Możesz uruchomić następującą komendę, aby uzyskać dostęp do roota bez interakcji:
źródło