Linux – sorry, you must have a tty to run sudo

javalinuxsudosudoers

I had already asked this question in Stack Overflow, but I've been asked to post it here. So doing the same.

I ran this command using my java program-

sudo -u <username> -S pwd

I got this output-

command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo

I tried editing /etc/sudoers but it already contains

<username>       ALL=(ALL)       NOPASSWD: ALL

Then, I learned that this can be done by commenting out the following code in /etc/sudoers

# Defaults requiretty

Also, by default, when attempting to execute a command as another user using sudo, we have to provide our own password. But this can be changed by making the following change in /etc/sudoers-

Defaults targetpw

My Question is, is it possible to execute my above command in java without making any changes anywhere i.e. by having default settings?

Best Answer

I don't know how to run shell commands in Java but have a look at -t option for ssh command

-t force pseudo-tty allocation.

That is what I do when I need to run command as root over ssh(direct root login disable and tty required by sudo)

Related Question