Ik probeer enkele bronnen te compileren met behulp van een makefile. In de makefile zijn er een aantal commando’s die moeten worden uitgevoerd als sudo
.
Als ik de bronnen vanaf een terminal compileer, gaat alles goed en wordt de make gepauzeerd de eerste keer dat een sudo
-opdracht wordt uitgevoerd in afwachting van een wachtwoord. Zodra ik het wachtwoord typ, maak ik cv’s en voltooien.
Maar ik zou graag de bronnen in NetBeans willen kunnen compileren. Dus ik begon een project en liet netbeans zien waar de bronnen te vinden zijn, maar wanneer ik het project compileer, geeft het de fout:
sudo: no tty present and no askpass program specified
De eerste keer dat het een sudo
-opdracht raakt.
Ik heb het probleem op internet opgezocht en alle oplossingen die ik heb gevonden wijzen op één ding: het wachtwoord voor deze gebruiker uitschakelen. Aangezien de gebruiker in kwestie hier root is. Ik wil dat niet doen.
Is er een andere oplossing?
Antwoord 1, autoriteit 100%
Als u de gebruiker toestemming geeft om die opdracht te gebruiken zonder om een wachtwoord te vragen, zou het probleem moeten worden opgelost. Open eerst een shell-console en typ:
sudo visudo
Bewerk vervolgens dat bestand om het helemaal aan het einde toe te voegen:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
bijv.
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
staat gebruiker john
toe om poweroff
, start
en stop
te sudoen zonder om een wachtwoord te worden gevraagd.
p>
Kijk naar de onderkant van het scherm voor de toetsaanslagen die u in Visudo moet gebruiken – dit is trouwens niet VI – en afsluiten zonder op te sparen bij het eerste teken van een probleem. Gezondheid Waarschuwing: Corrupten van dit bestand heeft ernstige gevolgen, bewerken met zorg!
2, Autoriteit 72%
Probeer:
-
Gebruik
NOPASSWD
Lijn voor alle opdrachten, ik bedoel:jenkins ALL=(ALL) NOPASSWD: ALL
-
Plaats de regel na alle andere regels in de
sudoers
Bestand.
die voor mij werkte (ubuntu 14.04).
3, Autoriteit 65%
Probeer:
ssh -t remotehost "sudo <cmd>"
Hiermee wordt de bovenstaande fouten verwijderd.
4, Autoriteit 52%
Na alle alternatieven heb ik gevonden:
sudo -S <cmd>
De -S-(STDIN) -optie veroorzaakt sudo om het wachtwoord te lezen van de standaardinvoer in plaats van het terminalapparaat.
hierboven opdracht heeft nog steeds een wachtwoord nodig om te worden ingevoerd. Als u het wachtwoord handmatig invoeren, in gevallen zoals Jenkins, werkt deze opdracht:
echo <password> | sudo -S <cmd>
5, Autoriteit 10%
Voor Ubuntu 16.04-gebruikers
Er is een bestand dat u moet lezen met:
cat /etc/sudoers.d/README
Een bestand plaatsen met modus 0440 in /etc/sudoers.d/myuser met volgende inhoud:
myuser ALL=(ALL) NOPASSWD: ALL
moet het probleem oplossen.
Vergeet niet om:
chmod 0440 /etc/sudoers.d/myuser
6, Autoriteit 9%
Probeer deze:
echo '' | sudo -S my_command
7, Autoriteit 5%
Inloggen in uw Linux. Brand de volgende opdrachten. Wees voorzichtig, omdat Sudoer een risicovolle propositie is.
$ sudo visudo
Zodra VI-editor wordt geopend, maakt u de volgende wijzigingen:
-
Reageer op
Defaults requiretty
# Defaults requiretty
-
Ga naar het einde van het bestand en voeg
toe
jenkins ALL=(ALL) NOPASSWD: ALL
8, Autoriteit 5%
Als je door een kans kwam, kwam je hier omdat je niet in de Ubuntu kunt sudoen die wordt geleverd met Windows10
-
Bewerk het bestand / etc / hosts van Windows (met Kladblok), het zal zich bevinden op:
%localappdata\lxss\rootfs\etc
, Toevoegen127.0.0.1 WINDOWS8
, dit zal de eerste fout opdoen die het de host niet kan vinden. -
Om de
no tty present
fout te verwijderen, doe altijdsudo -S <command>
9, Autoriteit 4%
in Jenkins :
echo '<your-password>' | sudo -S command
, bijvoorbeeld : –
echo '******' | sudo -S service nginx restart
U kunt mask wachtwoord plugin gebruiken om uw wachtwoord te verbergen
10, Autoriteit 4%
Dit werkte voor mij:
echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
waar uw gebruiker “myuser”
is
Voor een docker-afbeelding, dat zou gewoon zijn:
RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
11, Autoriteit 2%
Ik denk dat ik iemand met mijn zaak kan helpen.
Ten eerste heb ik de gebruikerinstelling gewijzigd in /etc/sudoers
verwijzend naar boven het antwoord. Maar het werkte nog steeds niet.
myuser ALL=(ALL) NOPASSWD: ALL
%mygroup ALL=(ALL:ALL) ALL
In mijn geval, myuser
zat in de mygroup
.
en ik heb geen groepen nodig. Dus, verwijderde die lijn.
(mag die lijn niet zoals ik verwijderen, gewoon de opmerking markeren.)
myuser ALL=(ALL) NOPASSWD: ALL
het werkt!
12
Running Shell-scripts die Sudo-opdrachten daarin bevatten uit Jenkins loopt mogelijk niet zoals verwacht. Volg dit, volg
Eenvoudige stappen:
-
op Ubuntu gebaseerde systemen, voer “$ sudo visudo”
-
Hiermee wordt het bestand geopend / etc / sudoers.
- Als uw Jenkins-gebruiker al in dat bestand staat, moet u deze aanpassen om er zo uit te zien:
uit
Jenkins ALL = (ALL) NOPASSWD: ALL
-
Sla het bestand op
-
Relaunch Your Jenkins-taak
-
U moet dat foutbericht opnieuw zien 🙂
13
Deze fout kan ook ontstaan wanneer u probeert een terminalopdracht uit te voeren (die root-wachtwoord vereist) van een niet-shell-script, bijv. sudo ls
(in Backticks) van een RUBY-programma. In dit geval kunt u verwachten nut (http: //en.wikipedia. org / wiki / verwacht ) of zijn alternatieven.
Bijvoorbeeld, in Ruby om sudo ls
uit te voeren zonder sudo: no tty present and no askpass program specified
te krijgen, kun je dit uitvoeren:
require 'ruby_expect'
exp = RubyExpect::Expect.spawn('sudo ls', :debug => true)
exp.procedure do
each do
expect "[sudo] password for _your_username_:" do
send _your_password_
end
end
end
[dit gebruikt een van de alternatieven voor ExpectTCL-extensie: ruby_expectgem].
Antwoord 14
Ter referentie, voor het geval iemand anders hetzelfde probleem tegenkomt, ik zat een goed uur vast met deze fout, wat niet zou mogen gebeuren omdat ik de NOPASSWD-parameter gebruikte.
Wat ik NIET wist, was dat sudo exact dezelfde foutmelding kan geven als er geen tty is en het commando dat de gebruiker probeert te starten geen deel uitmaakt van het toegestane commando in het bestand /etc/sudoers.
Hier een vereenvoudigd voorbeeld van mijn bestandsinhoud met mijn probleem:
bguser ALL = NOPASSWD: \
command_a arg_a, \
command_b arg_b \
command_c arg_c
Als bguser zal proberen “sudo command_b arg_b” te starten zonder enige tty (bguser wordt gebruikt voor een of andere daemon), dan zal hij de fout “no tty present and no askpass program selected” tegenkomen.
Waarom?
Omdat er een komma ontbreekt aan het einde van de regel in het bestand /etc/sudoers…
(Ik vraag me zelfs af of dit een verwacht gedrag is en geen bug in sudo, aangezien de juiste foutmelding voor een dergelijk geval moet zijn: “Sorry, gebruiker bguser mag niet uitvoeren enz.”)
Antwoord 15
Ik kreeg deze foutmelding omdat ik mijn gebruiker had beperkt tot slechts één uitvoerbaar ‘systemctl’ en het visudo-bestand verkeerd had geconfigureerd.
Dit is wat ik had:
jenkins ALL=NOPASSWD: systemctl
U moet echter het volledige pad naar het uitvoerbare bestand opnemen, zelfs als het standaard op uw pad staat, bijvoorbeeld:
jenkins ALL=NOPASSWD: /bin/systemctl
Hierdoor kan mijn jenkins-gebruiker services herstarten maar geen volledige root-toegang hebben
Antwoord 16
Als u deze regel toevoegt aan uw /etc/sudoers
(via visudo
), wordt dit probleem opgelost zonder dat u uw wachtwoord hoeft in te voeren en wanneer een alias voor sudo -S
werkt niet (scripts die sudo
aanroepen):
Defaults visiblepw
Lees natuurlijk zelf de handleidingom het te begrijpen , maar ik denk dat het voor mijn gebruik in een LXD-container via lxc exec instance -- /bin/bash
redelijk veilig is omdat het het wachtwoord niet via een netwerk afdrukt.
17
Niemand heeft verteld wat deze fout zou kunnen veroorzaken, in geval van migratie van de ene host naar de andere, onthoud je over het controleren van de hostnaam in Sudoers-bestand:
Dus dit is mijn / etc / sudoers config
User_Alias POWERUSER = user_name
Cmnd_Alias SKILL = /root/bin/sudo_auth_wrapper.sh
POWERUSER hostname=(root:root) NOPASSWD: SKILL
Als het niet overeenkomt
uname -a
Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux
Het verschijnt deze fout:
Geen TTY-aanwezig en geen AskPass-programma opgegeven
18
andere opties, niet gebaseerd op Nopasswd:
- Start NetBeans met root-privilege ((Sudo NetBeans) of vergelijkbaar) die vermoedelijk het buildproces met root en dus Sudo zal vullen, zal Sudo automatisch slagen.
- Maak de bewerkingen die u nodig hebt om SUEXEC te doen – maak ze eigendom van de root en stel de modus in op 4755. (Dit zal natuurlijk elke gebruiker op de machine laten lopen.) Op die manier hebben ze geen sudo nodig alles.
- Het maken van virtuele harde schijfbestanden met laarzen moet helemaal geen sudo nodig hebben. Bestanden zijn slechts bestanden en bootsectoren zijn slechts gegevens. Zelfs de virtuele machine moet niet noodzakelijkerwijs root nodig hebben, tenzij u een geavanceerde apparaatdoorschakeling doet.
19
Hoewel deze vraag oud is, is het nog steeds relevant voor mijn meer of minder up-to-date systeem. Na het inschakelen van debugmodus van sudo (Debug sudo /var/log/sudo_debug all@info
in /etc/sudo.conf
) Ik werd gewezen op / dev: “/dev is world writable
“. Mogelijk moet u de TTY-bestandsrechten controleren , met name die van de map waarin de TTY / PTS-knooppunt zich bevindt.
20
Ik was in staat om dit gedaan te krijgen, maar zorg ervoor dat u de stappen op de juiste manier volgt.
Dit is voor iedereen die importfouten krijgt.
Stap1 : Controleer of bestanden en mappen het probleem van de toestemming hebben uitgevoerd.
Linux Gebruikersgebruik:
chmod 777 filename
Step2 : Controleer welke gebruiker de toestemming heeft om het uit te voeren.
Stap3 : Open Terminal Typ deze opdracht.
sudo visudo
Voeg deze regels toe aan de onderstaande code
www-data ALL=(ALL) NOPASSWD:ALL
nobody ALL=(ALL) NOPASSWD:/ALL
Dit is om toestemming te verlenen om het script uit te voeren en het toe te staan alle bibliotheken te gebruiken. De gebruiker is over het algemeen ‘niemand’ of ‘www-gegevens’.
Bewerk uw code nu als
echo shell_exec('sudo -u the_user_of_the_file python your_file_name.py 2>&1');
Ga naar Terminal om te controleren of het proces actief is
Typ dit daar …
ps aux | grep python
Hiermee wordt het proces uitgevoerd in Python.
toevoegen ons :
Gebruik de onderstaande code om de gebruikers in uw systeem te controleren
cut -d: -f1 /etc/passwd
Bedankt!
21
1 Open / etc / Sudoers
Typ sudo vi /etc/sudoers
. Hiermee wordt uw bestand in de bewerkingsmodus geopend.
2 Voeg Linux-gebruiker toe / wijzigen
Zoek naar de invoer voor Linux-gebruiker. Wijzig zoals hieronder als gevonden of een nieuwe regel toevoegen.
<USERNAME> ALL=(ALL) NOPASSWD: ALL
3 Opslaan en afsluiten van de bewerkingsmodus
22
Pipeline gebruiken:
echo your_pswd | sudo -S your_cmd
Gebruik hier-Document:
sudo -S cmd <<eof
pwd
eof
#remember to put the above two lines without "any" indentations.
Open een terminal om het wachtwoord te vragen (welke werkt):
gnome-terminal -e "sudo cmd"
xterm -e "sudo cmd"
23
Ik had hetzelfde foutmelding toen ik probeerde sshfs te monteren die sudo nodig hebben: de opdracht is zoiets:
sshfs -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" [email protected]:/var/www /mnt/sshfs/www
Door het toevoegen van de optie -o debug
sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" [email protected]:/var/www /mnt/sshfs/www
Ik had dezelfde boodschap van deze vraag:
sudo: no tty present and no askpass program specified
Dus door anderen te lezen, werd ik om een bestand in /etc/sudoer.d/user
op My.Server.TLD te maken met:
user ALL=NOPASSWD: /usr/lib/openssh/sftp-server
En nu kan ik de drive monteren zonder te veel extra recht op mijn gebruiker te geven.
24
De oplossing voor het probleem is
Als u dit probleem overal anders bent, volg dan van de Jenkins-instantie dit vanaf de 2e stap. De eerste stap is voor de gebruiker die met het Jenkins-exemplaar is uitgegeven.
Ga naar Jenkins-exemplaar van Google Cloud Console.
Voer de opdrachten in
sudo su
Visudo -F / etc / Sudoers
Voeg de volgende regel aan het einde toe
Jenkins ALL = NOPASSWD: ALL
Checkout hier Om de rootcause van dit probleem te begrijpen
25
Hieronder werken acties op ubuntu20
- bewerken / etc / sudoers
visudo
of
vi /etc/sudoers
- Voeg hieronder inhoud toe
userName ALL=(ALL) NOPASSWD: ALL
%sudo ALL=(ALL:ALL) NOPASSWD:ALL