鉴于Web应用程序没有su特权,我想执行一个需要sudo的shell脚本。我也想避免让用户输入密码。我有什么选择?基本上,这就是我想要做的。

小票申请表(用于更改IP的表格)

@Override
protected void onSubmit() {
    System.out.println("Submitted");
    try {
        Shell.updateIp("eth0", "192.168.217.129");
    } catch (IOException e) {
        e.printStackTrace();
    }
}


Shell.java

public static void updateIp(String ethernetInterface, String ip) throws IOException {
    ProcessBuilder builder = new ProcessBuilder("/home/keeboi/Desktop/iptool.sh", ethernetInterface, ip);
    Process child = builder.start();
    Network.readOutput(child);
    child.destroy();
}


iptool.sh执行一个可运行的jar。

iptool.sh

#!/bin/sh
sudo java -jar changeip.jar $1 $2


我得到:

sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts


再次强调一下,该Web应用程序没有任何su特权,并且我希望避免向用户询问密码。

编辑:

我已经尝试过将keeboi ALL = NOPASSWD: /home/keeboi/Desktop/iptool.sh添加到我的/etc/sudoers中,但是它仍然需要密码。

更新资料

也添加了keeboi ALL = NOPASSWD: /home/keeboi/Desktop/changeip.jar,没有骰子。

最佳答案

只需在/ etc / sudoers中添加NOPASSWD即可:

user     ALL = NOPASSWD: /home/keeboi/Desktop/iptool.sh


这将关闭密码检查。

10-04 21:58