≡ 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

OR

sudo: no tty present and no askpass program specified

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

Tutorial details
DifficultyEasy (rss)
Root privilegesYes
RequirementsNone
Estimated completion time2m
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:

 
su --session-command="/path/to/command1 arg1 arg2"
 

OR

 
ssh user@server1.nixcraft.in su --session-command="/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
 

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)

Tweet itFacebook itGoogle+ itPDF itFound an error/typo on this page?

{ 8 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

    Done!

    • 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.

Leave a Comment