≡ Menu

sudo: Sorry, you must have a tty to run sudo Error on a Linux and Unix

I‘m trying to run the following command:

ssh user@box.example.com sudo command1 /path/to/file

But, an error is displayed follows:

sudo: sorry, you must have a tty to run sudo


sudo: no tty present and no askpass program specified

How do I fix this problem on Linux or Unix based systems?

This is done in Fedora, RHEL, CentOS, many other Linux distribution, and Unix-like systems for security concern as it will show the password in clear text format.

What is the fix on a Linux or Unix bash shell?

You have to run your ssh command as follows to avoid this error:

ssh -t hostname sudo command
ssh -t user@hostname sudo command
ssh -t user@box.example.com sudo command1 /path/to/file

Sample session:

Fig.01: Linux and Unix tty to run sudo if I can sudo without a password over ssh

Fig.01: Linux and Unix tty to run sudo if I can sudo without a password over ssh

The -t option force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g., when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

The requiretty option in sudoers file

The requiretty if set in sudo config file sudoers, sudo will only run when the user is logged in to a real tty. When this flag is set, sudo can only be run from a login session and not via other means such as cron, shell/perl/python or cgi-bin scripts. This flag is set on many distores by default. Edit /etc/sudoers, file, enter:
# visudo
Find line that read as follows:

Defaults    requiretty

Either comment it out the line or delete the line:

#Defaults    requiretty

Save and close the file.

How Do I run command without using the -t option?

You can use the su command instead of the sudo command as follows:

## NOTE: RHEL/CentOS specific syntax ##
su --session-command="/path/to/command1 arg1 arg2"
## others ##
su -c '/path/to/command1 arg1 arg2'


ssh user@server1.nixcraft.in su --session-command="/path/to/command1 arg1 arg2" 
ssh user@server1.nixcraft.in su -c '/path/to/command1 arg1 arg2'

You can run /scripts/job5143 as vivek user using the same syntax:

ssh user@server1.nixcraft.in su --session-command="/scripts/job1 /nas" vivek
ssh user@server1.nixcraft.in su vivek -c "/scripts/job1 /nas"

Another option is to use the following syntax (see below in comments):

echo -e "\n"|sudo -S command

See man pages for more info – ssh(1), sudoers(5), visudo(8)

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:

{ 15 comments… add one }
  • Geoff August 25, 2010, 6:26 pm

    Next response:
    “Pseudo-terminal will not be allocated because stdin is not a terminal”
    Your thoughts?

  • Geoff August 25, 2010, 6:33 pm

    — Remove and ampersand after the command and it works fine.

  • acid child April 17, 2012, 7:57 pm

    This worked perfectly for me thanks for the tip!

  • nkiran November 1, 2012, 5:04 am

    One more way of doing this –
    Open /etc/sudoers
    comment out: #Default requiretty


    • benwing October 23, 2013, 6:52 pm

      modifying sudoers can be taken a step further and only be made a requirement for specific users.
      ie. leave Defaults requiretty uncommented and add

      Defaults:username    !requiretty
  • Abhinav December 27, 2013, 7:16 am

    Good one. Needed to do it today. and that error was irritating the hell out of me. Thanks for the post.

  • andy April 1, 2014, 7:51 am

    I think we can try sudo with -S parameter. As from man page of sudo:

    -S : The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device. The password must be followed by a newline character. So maybe:

    echo -e "\n"|sudo -S 

    And here’s more info about this.

  • AngelDeaD February 9, 2015, 8:28 pm

    I work with linux for more than 2 years. But on dedicated servers, that linux does not require to use sudo. Sudo is not even installed. And I have never had issues with permission, except chmod. How to use linux with out sudo, like it is on dedicated servers? (I’m talking about Debian, I use it since Debian 5) When I download debian from official website and install it on my laptop it require sudo almost for everything. And this Debian require an user to use Debian, while on dedicated servers, you do everything with root, you log in to root, you create users with root, and everything with OUT sudo. Is there server version and client version of linux’s or I’m missing something.
    Thanks in advance for reply.

  • Prakash Ashokan October 22, 2015, 6:20 pm

    It helps to resolve the “[sshexec] sorry, you must have a tty to run sudo” issue.

  • Prakash Ashokan October 22, 2015, 6:21 pm

    Thanks a lot for the commands.

  • Prakash Ashokan October 22, 2015, 9:06 pm

    Is there any option without Comment this #Defaults requiretty because my team is don’t want to edit the SUDO file. So I have to resolve with my own script. Please help me to resolve this issue. Kindly provide me if you have any solutions.

  • Shubham February 3, 2016, 12:06 pm

    ssh -t hostname sudo command

    Above syntax made my day… Thanks a lot guys.. :)

  • Mohd Meesam February 15, 2016, 1:19 pm

    Disable ‘requiretty’ in sudoers file

  • Ashvini September 5, 2016, 7:14 pm

    Above commands are helpful, but my problem is somewhat different:

    I am trying to launch a linux instance using Redhat linux ami and got the error “sudo: Sorry, you must have a tty to run sudo” to run user data script. Can anyone help how to get rid of this error with CloudFormation template? Any help is appreciated. Thank you!

  • Minakshi February 15, 2017, 11:43 pm

    Thank you. My solution was to edit /etc/sudoers
    Either comment it out the line or delete the line:
    #Defaults requiretty

    But, I am still puzzled that why did it change? I had executed 10 different commands before that as an ansible user and then ran couple of playbooks as “root” and all of a sudden, it stopped working with error message: | FAILED | rc=0 >>

    Thanks for posting the solution.

Security: Are you a robot or human?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , , ,