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

ADVERTISEMENTS



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

I‘m trying to run the following command:ssh user@box.example.com sudo command1 /path/to/fileBut, an error is displayed follows:

OR

sudo: no tty present and no askpass program specified

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



[donotprint]

Tutorial details Difficulty Easy (rss) Root privileges Yes Requirements None Time 2m

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

[/donotprint]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.

You have to run your ssh command as follows to avoid error that read as sudo: Sorry, you must have a tty to run sudo Error:

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

Sample session:



The requiretty option in sudoers file

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 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' ## NOTE: RHEL/CentOS specific syntax ## su --session-command="/path/to/command1 arg1 arg2" ## others ## su -c '/path/to/command1 arg1 arg2'

OR

ssh user @ server1.nixcraft.in su --session-command = "/path/to/command1 arg1 arg2" OR ssh user @ server1.nixcraft.in su -c '/path/to/command1 arg1 arg2' ssh user@server1.nixcraft.in su --session-command="/path/to/command1 arg1 arg2" OR 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 OR ssh user @ server1.nixcraft.in su vivek -c "/scripts/job1 /nas" ssh user@server1.nixcraft.in su --session-command="/scripts/job1 /nas" vivek OR 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 "

" | sudo -S command echo -e "

"|sudo -S command

See man pages for more info – visudo(8)