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

by on August 8, 2007 · 8 comments· LAST UPDATED February 9, 2015

in , ,

I'm trying to run the following command:

ssh 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?

Tutorial details
DifficultyEasy (rss)
Root privilegesYes
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 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"


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

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

ssh 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 itG+ itDownload PDF versionFound an error/typo on this page?

{ 8 comments… read them below or add one }

1 Geoff August 25, 2010 at 6:26 pm

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


2 Geoff August 25, 2010 at 6:33 pm

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


3 acid child April 17, 2012 at 7:57 pm

This worked perfectly for me thanks for the tip!


4 nkiran November 1, 2012 at 5:04 am

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



5 benwing October 23, 2013 at 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


6 Abhinav December 27, 2013 at 7:16 am

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


7 andy April 1, 2014 at 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.


8 AngelDeaD February 9, 2015 at 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

Tagged as: , , , , , ,

Previous Faq:

Next Faq: