运行 使用 Java processBuilder 的 sudo 命令

Run sudo command using Java processBuilder

我需要 运行 来自 java 的 sudo 命令,并使用 processbuilder 或类似工具将输出重定向到文件。

两个问题:

  1. 使用 echo 传递 sudo 密码是否会按如下方式工作?
  2. 尽管文件已创建,但从未向其中写入任何内容。有什么想法吗?

    ProcessBuilder conntrack_process = new ProcessBuilder("/bin/bash", "-c", "echo '<passwordhere>' | sudo conntrack -L");
    conntrack_process.redirectOutput(new java.io.File("/home/<homedir>/conntrack_out.txt"));
    Process ct_process = conntrack_process.start();
    ct_process.waitFor();
    ct_process.destroy();
    

我正在使用 Ubuntu 16.04.

首先,您需要将 -Ssudo 结合使用,使其从标准输入中读取密码。
其次,您应该阅读错误流或将错误流重定向到某处以了解任何错误。

老问题,而不是尝试回显密码,你应该设置你的 sudoers 文件以允许该用户只允许没有密码的命令

myusername ALL = (root) NOPASSWD: /path/to/my/program

https://unix.stackexchange.com/questions/18830/how-to-run-a-specific-program-as-root-without-a-password-prompt