Skip to content

Instantly share code, notes, and snippets.

@imranity
Created February 13, 2015 22:38
Show Gist options
  • Save imranity/9246dd195f785cf4783d to your computer and use it in GitHub Desktop.
Save imranity/9246dd195f785cf4783d to your computer and use it in GitHub Desktop.
How to solve "sudo: no tty present and no askpass program specified" when trying to run a shell from Jenkins
Running shell scripts that have contain sudo commands in them from jenkins might not run as expected. To fix this, follow along
Simple steps:
1. On ubuntu based systems, run " $ sudo visudo "
2. this will open /etc/sudoers file.
3. If your jenkins user is already in that file, then modify to look like this:
jenkins ALL=(ALL) NOPASSWD: ALL
4. save the file by doing Ctrl+O (dont save in tmp file. save in /etc/sudoers, confirm overwrite)
5. Exit by doing Ctrl+X
6. Relaunch your jenkins job
7. you shouldnt see that error message again :)
@jdhillwan
Copy link

Thanks!! Worked for me.

@nskforward
Copy link

It doesn't work in case we SSH connect to server via PHP script. Any ideas?
$ssh->exec("sudo /usr/sbin/nginx -s reload"); // --> sudo: no tty present and no askpass program specified

@bakasmarius
Copy link

bakasmarius commented Oct 10, 2017

@nskforward: I'm just guessing here, but try "-S" instead of "-s"

@perguth
Copy link

perguth commented Oct 26, 2017

I thinks it's better to grant Jenkins sudo access only for the script that requires it. Eg.:

jenkins ALL=NOPASSWD:/some-path/some-script

@cmpDrone
Copy link

whatever the solution worked superb

@0x962
Copy link

0x962 commented Dec 15, 2017

Thank god i found this. :)

@imranhussain293
Copy link

Thanks! This was very helpful :)

@rwalus
Copy link

rwalus commented Mar 25, 2018

TY! :)

@miqueiasdesouza
Copy link

Thanks!

@rashnil-git
Copy link

I was trying to run a shell script that executes a command on remote machine from a spark batch and was getting the above error. For now, the above helped by setting this for hdfs user. Thanks!

@Aranjan21
Copy link

It worked for me as well

@carmen12
Copy link

Thanks a lot!

@sujataw
Copy link

sujataw commented Sep 3, 2018

Not working in my case, I am executing shell script from Jenkins server.

@sujataw
Copy link

sujataw commented Sep 5, 2018

  • sudo python /home/engineqa/Desktop/LinuxAutomation/execute_test.py
    sudo: no tty present and no askpass program specified
    Build step 'Execute shell' marked build as failure
    Finished: FAILURE

Showing error like that

@NasrSyncBac
Copy link

Thanks!

@UQBuild
Copy link

UQBuild commented Sep 20, 2018

Not working in my case, I am executing shell script from Jenkins server.

@sovat
Copy link

sovat commented Nov 14, 2018

Thanks, it really works!

@AbhiMatcha
Copy link

  • sudo python /home/engineqa/Desktop/LinuxAutomation/execute_test.py
    sudo: no tty present and no askpass program specified
    Build step 'Execute shell' marked build as failure
    Finished: FAILURE

Showing error like that

Can resolve this error. When you run Jenkins build user will be Jenkins so just run command sudo vim /etc/sudoers and mention %jenkins ALL=(ALL) NOPASSWD:ALL and save.

Hope this will work for you :)

@dileep57
Copy link

Thanks it's working... 👍

@tranvanthuc
Copy link

Thanks it's running ... 💯

@paritalamahi
Copy link

Hi, i am running a jmeter script from jenkins aws box.I need to write a report file to jmeter folder.It is pulling issue file not found exception.Even though i gave all access .

@Estefycp
Copy link

thanks!

@BBrown4
Copy link

BBrown4 commented Apr 5, 2020

Thanks so much!

@imneonizer
Copy link

In response to the question asked here:
https://stackoverflow.com/questions/25189348/unable-to-provide-password-to-a-process-with-subprocess-python

On linux you can bypass sudo prompt using:

echo <password> | sudo -S whoami

Pass the formatted command to subprocess and you are good to go:

import subprocess as sp

cmd = "whoami"
password= "<password>"

stdout, stderr = sp.Popen("echo {} | sudo -S {}".format(password, cmd), shell=True, stdout=sp.PIPE, stderr=sp.PIPE).communicate()

print(stdout.decode())

if stderr:
    print("error occured:")
    print(stderr.decode())

It should print root as command is executed by sudo user.

@hareeshgundam
Copy link

thanks....

@vyrusonline
Copy link

thank u sooo much dude ! u helped me a lot . Thanks again

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment