Hoe verhelp ik de ‘sudo: geen tty aanwezig en geen askpass-programma gespecificeerd’-fout?

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 johntoe om poweroff, starten stopte 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:

  1. Gebruik NOPASSWDLijn voor alle opdrachten, ik bedoel:

    jenkins ALL=(ALL) NOPASSWD: ALL
    
  2. Plaats de regel na alle andere regels in de sudoersBestand.

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.

bron

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:

  1. Reageer op Defaults requiretty

    # Defaults    requiretty
    
  2. 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

  1. Bewerk het bestand / etc / hosts van Windows (met Kladblok), het zal zich bevinden op: %localappdata\lxss\rootfs\etc, Toevoegen 127.0.0.1 WINDOWS8, dit zal de eerste fout opdoen die het de host niet kan vinden.

  2. Om de no tty presentfout te verwijderen, doe altijd sudo -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/sudoersverwijzend naar boven het antwoord. Maar het werkte nog steeds niet.

myuser   ALL=(ALL) NOPASSWD: ALL
%mygroup  ALL=(ALL:ALL) ALL

In mijn geval, myuserzat 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:

  1. op Ubuntu gebaseerde systemen, voer “$ sudo visudo”

  2. uit

  3. Hiermee wordt het bestand geopend / etc / sudoers.

  4. Als uw Jenkins-gebruiker al in dat bestand staat, moet u deze aanpassen om er zo uit te zien:

Jenkins ALL = (ALL) NOPASSWD: ALL

  1. Sla het bestand op

  2. Relaunch Your Jenkins-taak

  3. 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 lsuit te voeren zonder sudo: no tty present and no askpass program specifiedte 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 -Swerkt niet (scripts die sudoaanroepen):

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/bashredelijk 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@infoin /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/userop 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

  1. bewerken / etc / sudoers
visudo

of

vi /etc/sudoers
  1. Voeg hieronder inhoud toe
userName   ALL=(ALL) NOPASSWD: ALL
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

Other episodes