抱歉,你必须有一个 tty 才能运行 sudo

Alw*_*ner 13 linux java sudo sudoers

我已经在Stack Overflow 中问过这个问题,但我被要求在这里发布。所以做同样的事情。

我使用我的java程序运行了这个命令-

sudo -u <username> -S pwd
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出-

command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo
Run Code Online (Sandbox Code Playgroud)

我尝试编辑 /etc/sudoers 但它已经包含

<username>       ALL=(ALL)       NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

然后,我了解到这可以通过在 /etc/sudoers 中注释掉以下代码来完成

# Defaults requiretty
Run Code Online (Sandbox Code Playgroud)

此外,默认情况下,当尝试以其他用户身份使用 执行命令时sudo,我们必须提供自己的密码。但这可以通过在 /etc/sudoers- 中进行以下更改来更改

Defaults targetpw
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以在 Java 中执行我的上述命令而无需在任何地方进行任何更改,即通过默认设置

Ask*_*arn 3

我不知道如何在 Java 中运行 shell 命令,但看看 ssh 命令的 -t 选项

-t force pseudo-tty allocation.
Run Code Online (Sandbox Code Playgroud)

这就是当我需要通过 ssh 以 root 身份运行命令时我所做的(直接 root 登录禁用和 sudo 所需的 tty)