Mam skrypt, który uruchamia inny skrypt przez SSH na zdalnym serwerze przy użyciu sudo. Jednak kiedy wpisuję hasło, pojawia się ono na terminalu. (W przeciwnym razie działa dobrze)
ssh user@server "sudo script"
Jaki jest właściwy sposób, aby to zrobić, abym mógł wpisać hasło sudo przez SSH bez pojawiania się hasła podczas wpisywania?
ssh <user@server> sudo <script>
, ponieważ otrzymywałem błądsudo: no tty present and no askpass program specified
Odpowiedzi:
Innym sposobem jest użycie
-t
przełącznika, abyssh
:Zobacz
man ssh
:źródło
ssh -t localhost <<< "sudo touch file;"
EDYCJA Najwyraźniej ważne jest, aby faktycznie podać polecenie jako parametr, a nie przez standard w (co ma sens z perspektywy czasu).-t
metoda pokaże również kolorowe wyjście poleceń, które normalnie zrobić.Udało mi się w pełni zautomatyzować to za pomocą następującego polecenia:
Zalety:
Odnośnie bezpieczeństwa: jak powiedział Kurt , uruchomienie tego polecenia pokaże twoje hasło w lokalnej historii basha i lepiej jest zapisać hasło w innym pliku lub zapisać polecenie all w pliku .sh i wykonać je. UWAGA: Plik musi mieć odpowiednie uprawnienia, aby tylko uprawnieni użytkownicy mieli do niego dostęp.
źródło
-t
, ale nie przeczytałem instrukcji na tyle uważnie, żeby zobaczyć, że możesz ją przekazać dwa razy! To jest to, czego szukałem od miesięcy! Ze względów bezpieczeństwa po prostu ustawiłem zmienną hasła przed uruchomieniem zread -s -p "Password: " pw
, a następnie zrobiłemecho "$pw" | ....
. Przekształciłem to teraz w przydatny skrypt dla siebie :).Zakładając, że nie chcesz monitować o hasło :
Przykład
źródło
Sudo przez SSH przekazując hasło, tty nie jest wymagane:
Możesz użyć sudo zamiast ssh bez zmuszania ssh do posiadania pseudo-tty (bez użycia przełącznika ssh "-t"), mówiąc sudo, aby nie wymagał interaktywnego hasła i po prostu przechwytywał hasło ze standardowego wejścia. Robisz to za pomocą przełącznika "-S" w sudo. To sprawia, że sudo nasłuchuje hasła na stdin i przestaje nasłuchiwać, gdy zobaczy nową linię.
Przykład 1 - Proste zdalne polecenie
W tym przykładzie wysyłamy proste
whoami
polecenie:Mówimy sudo, aby nie wydawało zachęty i pobierało dane wejściowe ze standardowego wejścia. To sprawia, że hasło sudo przechodzi całkowicie cicho, więc jedyną odpowiedzią, którą otrzymujesz, jest wyjście
whoami
.Ta technika ma tę zaletę, że umożliwia uruchamianie programów przez sudo przez ssh, które same wymagają wejścia stdin. Dzieje się tak, ponieważ sudo zużywa hasło w pierwszym wierszu stdin, a następnie pozwala dowolnemu programowi na kontynuowanie pobierania stdin.
Przykład 2 - zdalne polecenie, które wymaga własnego standardowego wejścia
W poniższym przykładzie zdalne polecenie „cat” jest wykonywane przez sudo, a my udostępniamy dodatkowe wiersze przez stdin, aby zdalny kot mógł wyświetlić.
Dane wyjściowe pokazują, że
<remote_sudo_password>
linia jest używana przez sudo i że zdalnie wykonany cat wyświetla dodatkowe linie.Przykładem sytuacji, w której byłoby to korzystne, jest użycie ssh do przekazania hasła do uprzywilejowanego polecenia bez korzystania z wiersza poleceń. Powiedzmy, jeśli chcesz zamontować zdalny zaszyfrowany kontener przez ssh.
Przykład 3 - Montowanie zdalnego kontenera VeraCrypt
W tym przykładowym skrypcie zdalnie montujemy kontener VeraCrypt przez sudo bez dodatkowego tekstu zachęty:
Należy zauważyć, że we wszystkich przykłady wiersza polecenia powyżej (wszystko z wyjątkiem scenariusza) Do
<< EOF
konstruktu w wierszu poleceń spowoduje, że wszystko wpisane, w tym hasło, które mają być rejestrowane w lokalnych .bash_history urządzenia. Dlatego zdecydowanie zaleca się, aby w prawdziwym świecie używać go w całości za pomocą skryptu, jak powyższy przykład veracrypt, lub, jeśli w wierszu poleceń, umieścić hasło w pliku i przekierować ten plik przez ssh.Przykład 1a - Przykład 1 bez lokalnego hasła wiersza poleceń
Tak więc pierwszy przykład wyglądałby następująco:
Przykład 2a - Przykład 2 bez lokalnego hasła wiersza poleceń
a drugi przykład to:
Umieszczenie hasła w osobnym pliku nie jest konieczne, jeśli umieszczasz całość w skrypcie, ponieważ zawartość skryptów nie trafia do historii. Jednak nadal może być przydatne, jeśli chcesz zezwolić użytkownikom, którzy nie powinni widzieć hasła, na wykonanie skryptu.
źródło
cat
i przesłać wyniki do sudo? Czy możesz użyćsudo
jako głównego zdalnego polecenia ssh?cat
służy do przesyłania hasła użytkownika do sudo po drugiej stronie. Jeśli użytkownik może uruchomić sudo bez hasła, to nie jest to wymagane, ale nie sugeruję takiej konfiguracji. Powodem, dla którego jest przesyłany potokowo, jest zapobieganie wyświetlaniu hasła w wierszu poleceń zdalnego sysrtem. Wiersze poleceń nie są bezpieczne, każdy użytkownik może zobaczyć każdy wiersz polecenia za pomocąps auxwww
.cat
wpisanie polecenia sshcat \| sudo --prompt="" -S...
. Jeśli-S
siłysudo
do odczytania hasła ze stdin są w ogóle konieczne? Czy polecenie ssh mogło być po prostusudo --prompt="" -S...
?Najlepszym sposobem jest
ssh -t user@server "sudo <scriptname>"
na przykładssh -t user@server "sudo reboot"
. Najpierw zapyta o hasło użytkownika, a następnie roota (ponieważ uruchamiamy skrypt lub polecenie z uprawnieniami roota.Mam nadzieję, że pomogło i rozwiało twoje wątpliwości.
źródło
NOPASS
w konfiguracji na komputerze docelowym jest rozwiązaniem. Kontynuuj czytanie na http://maestric.com/doc/unix/ubuntu_sudo_without_passwordźródło
źródło
Napotkałem problem,
Potem spróbowałem
nie zadziałało
to działało poprawnie!
źródło
W zależności od Twojego zastosowania odniosłem sukces w następujących przypadkach:
Spowoduje to wyświetlenie monitu o hasło roota, a następnie poprawne wykonanie polecenia.
źródło