Próbuję skompilować niektóre źródła przy użyciu makefile. W pliku makefile znajduje się kilka poleceń, które należy uruchomić jako sudo
.
Kiedy kompiluję źródła z terminala, wszystko idzie dobrze i marka zostaje wstrzymana przy pierwszym uruchomieniu sudo
polecenia czekającego na hasło. Po wpisaniu hasła dokonaj wznowienia i uzupełnienia.
Ale chciałbym móc skompilować źródła w NetBeans. Więc zacząłem projekt i pokazałem netbeans gdzie znaleźć źródła, ale kiedy kompiluję projekt, pojawia się błąd:
sudo: no tty present and no askpass program specified
Pierwszy raz uderza sudo
polecenie.
Sprawdziłem problem w Internecie i wszystkie znalezione przeze mnie rozwiązania wskazują na jedną rzecz: wyłączenie hasła dla tego użytkownika. Ponieważ użytkownik, o którym mowa, jest rootem. Nie chcę tego robić.
Czy jest jakieś inne rozwiązanie?
sudo -n my-command
pracował dla mnie. HIH!sudo: a password is required
Odpowiedzi:
Zezwolenie użytkownikowi na użycie tego polecenia bez pytania o hasło powinno rozwiązać problem. Najpierw otwórz konsolę powłoki i wpisz:
Następnie edytuj ten plik, aby dodać do samego końca:
na przykład
pozwoli użytkownikowi
john
do sudopoweroff
,start
astop
bez konieczności podawania hasła.Spójrz u dołu ekranu na naciśnięcia klawiszy, których musisz użyć w visudo - tak przy okazji, to nie vi - i wyjdź bez zapisywania przy pierwszej oznaki jakiegokolwiek problemu. Ostrzeżenie zdrowotne: uszkodzenie tego pliku będzie miało poważne konsekwencje, edytuj ostrożnie!
źródło
Próbować:
Użyj
NOPASSWD
wiersza dla wszystkich poleceń, mam na myśli:Umieść linię po wszystkich innych liniach w
sudoers
pliku.To działało dla mnie (Ubuntu 14.04).
źródło
jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
jenkins
to tylko nazwa użytkownika? Musi to być nazwa użytkownika z komputera hosta? Co jeśli nazwa użytkownika na hoście odpowiada nazwie użytkownika ze zdalnego serwera?Próbować:
Spowoduje to usunięcie powyższych błędów.
źródło
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine
zobacz także: określony sudo-no-tty-present-and-no-askpass-program-określonysudo -A
Pozwala także na ustawieniesudo
programu askpass, ale widzę tylko GUI. Czy ktoś zna askpass, na który pozwalassh remotehost sudo -A askpass
?-A
forsudo
nie bierze argumentów i zamiast tego wymaga środowiskaSUDO_ASKPASS
lubsudo.conf
Sossh remotehost sudo -A command
nadal działałby. Wciąż ciekawy terminalowego programu askpass.Pseudo-terminal will not be allocated because stdin is not a terminal.
Po wszystkich alternatywach znalazłem:
Źródło
Powyższe polecenie nadal wymaga podania hasła. Aby usunąć ręczne wprowadzanie hasła, w przypadkach takich jak Jenkins, to polecenie działa:
źródło
sudo -S <command>
-true
akurat jest fikcyjnym poleceniem, które zwraca kod wyjścia 0 (false
to polecenie, które zwraca 1). Dziękuję, to jest jedyna prawdziwa odpowiedź, ponieważ wszyscy inni oczekują, że „sudo” zadziała!Password:
nic się nie dzieje. Nie mogę wpisać hasła.sudo
domyślnie odczyta hasło z podłączonego terminala. Problem polega na tym, że terminal nie jest podłączony, gdy jest uruchamiany z konsoli Netbeans. Musisz więc użyć alternatywnego sposobu wprowadzenia hasła: nazywa się to askpass programem .Program askpass nie jest konkretnym programem, ale dowolnym programem, który może prosić o hasło. Na przykład w moim systemie
x11-ssh-askpass
działa dobrze.W tym celu musisz określić, którego programu użyć, albo ze zmienną środowiskową,
SUDO_ASKPASS
albo wsudo.conf
pliku (zobaczman sudo
szczegóły).Możesz wymusić
sudo
użycie programu askpass, korzystając z opcji-A
. Domyślnie użyje go tylko wtedy, gdy nie ma podłączonego terminala.źródło
-A
nie wymaga to argumentów.-A
wymaga środowiskaSUDO_ASKPASS
lubsudo.conf
pliku. W takim przypadkussh host "export SUDO_ASKPASS=askpass;sudo -A cat /etc/passwd"
nadal działałby z terminalem askpass, jednak @chandru jest o wiele bardziej zwięzły zssh -t ...
Dla użytkowników Ubuntu 16.04
Jest plik, który musisz przeczytać:
Umieszczanie pliku w trybie 0440 w /etc/sudoers.d/myuser z następującą zawartością:
Powinien rozwiązać problem.
Nie zapomnij:
źródło
Spróbuj tego:
źródło
[sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt
@ sNICkerssssJeśli przypadkiem przyszedłeś tutaj, ponieważ nie możesz sudo w Ubuntu, który jest dostarczany z Windows10
Zmodyfikuj plik / etc / hosts z systemu Windows (za pomocą Notatnika), będzie on znajdować się pod adresem
%localappdata\lxss\rootfs\etc
:, dodaj127.0.0.1 WINDOWS8
, usunie to pierwszy błąd, że nie może znaleźć hosta.Aby pozbyć się
no tty present
błędu, zawsze róbsudo -S <command>
źródło
Zaloguj się do swojego systemu Linux. Wystrzel następujące polecenia. Zachowaj ostrożność, ponieważ edytowanie sudoer jest ryzykowną propozycją.
Po otwarciu edytora vi dokonaj następujących zmian:
Skomentować
Defaults requiretty
Idź na koniec pliku i dodaj
źródło
W Jenkins :
Np . : -
Możesz użyć wtyczki Mask Password, aby ukryć swoje hasło
źródło
To działało dla mnie:
gdzie twoim użytkownikiem jest „mój użytkownik”
dla obrazu Docker byłoby to po prostu:
źródło
Upewnij się, że twoje polecenie
sudo
jest częścią twojegoPATH
.Jeśli masz jedno polecenie (lub wiele, ale nie WSZYSTKIE)
sudoers
, otrzymaszsudo: no tty present and no askpass program specified
kiedy polecenie nie jest częścią twojej ścieżki (a pełna ścieżka nie jest określona).Możesz to naprawić, dodając polecenie do swojego polecenia
PATH
lub wywołując go ścieżką bezwzględną, tjsudo /usr/sbin/ipset
Zamiast
sudo ipset
źródło
sudoers
%sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/git
i używaniesudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
w git po aktualizacji hak powrotuno tty
, ale przy użyciusudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
pracy bez hasła.Komenda
sudo
kończy się niepowodzeniem, ponieważ próbuje monitować o hasło roota i nie ma przydzielonego pseudo-tty (ponieważ jest to część skryptu).Musisz zalogować się jako root, aby uruchomić to polecenie, lub skonfigurować następujące reguły w swoim
/etc/sudoers
(lubsudo visudo
:):Następnie upewnij się, że użytkownik należy do
admin
grupy (lubwheel
).Idealnie (bezpieczniej) byłoby ograniczenie uprawnień roota tylko do określonych poleceń, które można określić jako
%admin ALL=(ALL) NOPASSWD:/path/to/program
źródło
sudoers
pliku,apache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.sh
ale to nie działa dla mnie. daje następujący błądsudo: >>> /etc/sudoers: syntax error near line 120 <<< sudo: parse error in /etc/sudoers near line 120 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
apache ALL=(ALL) NOPASSWD: ALL
ale stanowi zagrożenie bezpieczeństwa. :)Myślę, że mogę pomóc komuś w mojej sprawie.
Najpierw zmieniłem ustawienie użytkownika w
/etc/sudoers
odniesieniu do powyższej odpowiedzi. Ale nadal nie działało.W moim przypadku
myuser
był wmygroup
.I nie potrzebowałem grup. Więc usunąłem ten wiersz.
(Nie należy usuwać tej linii jak ja, tylko zaznaczając komentarz.)
To działa!
źródło
Uruchamianie skryptów powłoki zawierających polecenia sudo z jenkins może nie działać zgodnie z oczekiwaniami. Aby to naprawić, wykonaj następujące czynności
Proste kroki:
W systemach opartych na Ubuntu uruchom „$ sudo visudo”
to otworzy plik / etc / sudoers.
Zapisz plik
Uruchom ponownie pracę Jenkinsa
nie powinieneś zobaczyć tego komunikatu o błędzie :)
źródło
Udało mi się to zrobić, ale upewnij się, że postępujesz zgodnie z instrukcjami. To jest dla każdego, kto dostaje błędy importu.
Krok 1 : Sprawdź, czy pliki i foldery mają problem z wykonaniem uprawnień. Korzystanie z systemu Linux:
Krok 2 : Sprawdź, który użytkownik ma uprawnienia do jego wykonania.
Krok 3 : otwórz terminal i wpisz to polecenie.
dodaj te linie do kodu poniżej
ma to na celu udzielenie pozwolenia na wykonanie skryptu i umożliwienie mu korzystania ze wszystkich bibliotek. Zasadniczo użytkownikiem jest „nikt” lub „dane www”.
teraz edytuj kod jako
przejdź do terminala, aby sprawdzić, czy proces jest uruchomiony, wpisz to tutaj ...
spowoduje to wyprowadzenie całego procesu uruchomionego w Pythonie.
Dodaj dodatki : użyj poniższego kodu, aby sprawdzić użytkowników w systemie
Dziękuję Ci!
źródło
Ten błąd może również wystąpić, gdy próbujesz uruchomić komendę terminalową (która wymaga hasła roota) z jakiegoś skryptu nie-powłoki, np.
sudo ls
(W backticks) z programu Ruby. W takim przypadku możesz użyć narzędzia Expect ( http://en.wikipedia.org/wiki/Expect ) lub jego alternatyw.Na przykład w Ruby, aby wykonać
sudo ls
bez uzyskiwaniasudo: no tty present and no askpass program specified
, możesz uruchomić to:[używa jednej z alternatyw dla rozszerzenia Oczekiwanie TCL: klejnot ruby_expect ].
źródło
Dla odniesienia, na wypadek, gdyby ktoś napotkał ten sam problem, utknąłem w dobrej godzinie z tym błędem, co nie powinno się zdarzyć, ponieważ użyłem parametru NOPASSWD.
NIE wiedziałem, że sudo może wywołać dokładnie ten sam komunikat o błędzie, gdy nie ma tty, a polecenie, które użytkownik próbuje uruchomić, nie jest częścią dozwolonego polecenia w pliku / etc / sudoers.
Oto uproszczony przykład zawartości mojego pliku z moim problemem:
Gdy bguser spróbuje uruchomić „sudo command_b arg_b” bez żadnego tty (bguser jest używany dla jakiegoś demona), wtedy napotka błąd „nie ma tty obecnego i nie określono programu askpass”.
Dlaczego?
Ponieważ na końcu wiersza w pliku / etc / sudoers brakuje przecinka ...
(Zastanawiam się nawet, czy jest to oczekiwane zachowanie, a nie błąd w sudo, ponieważ poprawny komunikat o błędzie dla takiego przypadku powinien brzmieć „Przepraszamy, bguser użytkownika nie może wykonywać itd.”)
źródło
Otrzymywałem ten błąd, ponieważ ograniczyłem mojego użytkownika do jednego pliku wykonywalnego „systemctl” i źle skonfigurowałem plik visudo.
Oto co miałem:
Musisz jednak podać pełną ścieżkę do pliku wykonywalnego, nawet jeśli domyślnie znajduje się on na Twojej ścieżce, na przykład:
To pozwala mojemu jenkinsowi na ponowne uruchomienie usług, ale nie ma pełnego dostępu do konta root
źródło
Nikt nie powiedział, co może powodować ten błąd, w przypadku migracji z jednego hosta na inny pamiętaj o sprawdzeniu nazwy hosta w pliku sudoers:
To jest moja konfiguracja / etc / sudoers
jeśli nie pasuje
wyświetli się ten błąd:
źródło
Inne opcje, nie oparte na NOPASSWD:
źródło
Być może pytanie jest niejasne, dlaczego żadna odpowiedź nie pasuje, ale miałem ten sam komunikat o błędzie, gdy próbowałem zamontować sshfs, który wymagał sudo: polecenie jest takie:
dodając opcję
-o debug
Miałem tę samą wiadomość na to pytanie:
Tak więc, czytając odpowiedzi innych, stałem
/etc/sudoer.d/user
się autorem pliku na mój.server.tld z:a teraz jestem w stanie zamontować dysk, nie dając zbyt wiele dodatkowych uprawnień mojemu użytkownikowi.
źródło
Chociaż to pytanie jest stare, wciąż ma znaczenie dla mojego mniej lub bardziej aktualnego systemu. Po włączeniu trybu debugowania sudo (
Debug sudo /var/log/sudo_debug all@info
in/etc/sudo.conf
) wskazałem / dev: "/dev is world writable
". Może więc być konieczne sprawdzenie uprawnień do pliku tty , szczególnie tych w katalogu, w którym znajduje się węzeł tty / pts.źródło
Jeśli dodasz ten wiersz do
/etc/sudoers
(przezvisudo
), rozwiąże to problem bez konieczności wyłączania wprowadzania hasła i gdy alias dlasudo -S
nie będzie działał (wywołanie skryptówsudo
):Oczywiście sam przeczytaj instrukcję, aby ją zrozumieć, ale myślę, że na mój użytek działa w kontenerze LXD za pośrednictwem
lxc exec instance -- /bin/bash
jego dość bezpiecznego, ponieważ nie drukuje hasła przez sieć.źródło
Za pomocą potoku:
Za pomocą dokumentu tutaj:
Otwórz terminal, aby zapytać o hasło (cokolwiek działa):
źródło
1 otwarte / etc / sudoers
typ
sudo vi /etc/sudoers
. Spowoduje to otwarcie pliku w trybie edycji.2 Dodaj / zmień użytkownika linuksa
Poszukaj wpisu dla użytkownika systemu Linux. Zmodyfikuj jak poniżej, jeśli znaleziono lub dodaj nowy wiersz.
3 Zapisz i wyjdź z trybu edycji
źródło