gpt4 book ai didi

java - 如何在 Java 中为 OS X 运行 sudo 命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:29 25 4
gpt4 key购买 nike

我正在使用 javafx 开发应用程序,我正在尝试在终端中使用命令打开一个应用程序,我正在使用我的 java 代码运行命令我的命令有一些变量它有我的安装程序文件的路径,它不会总是相同因为随着构建的更新,文件名可能会有所不同。
这是我运行命令的示例,它不是我正在运行的确切命令,但命令格式相同。

Process process = Runtime.getRuntime().exec("echo password | sudo -S open -a safari");
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();

进程没有给出任何输出,它停在那里,没有任何反应。我从终端尝试过相同的命令,它工作正常。

我已经尝试过这个链接中提到的东西

How to execute bash command with sudo privileges in Java?

但它也没有用。

我还从我的 Java 代码中运行类似“chmod +x”的命令,这些命令运行良好。我原来的命令是这样的:-

runCommand = "echo" + " " + password + "| sudo -S " + "\"" + a.getAbsolutePath() + "\"" + " --deploymentFile="
+ "\"" + b.getAbsolutePath() + "\"";

其中 a.getAbsolutePath() 是安装程序文件的路径,b.getAbsolutePath() 是我们用于安装应用程序的部署文件的路径。

pb.getInputStream()

打印命令,当我复制并粘贴到终端时它运行正常。

pb.getErrorStream()

什么都不给。

我试过运行

String[] cmd = {"/bin/bash","-c","echo tester| sudo -S ","\"",a.getAbsolutePath(),"\"","\""," --deploymentFile=","\"",b.getAbsolutePath()};

String[] cmd = {"/bin/bash","-c","echo tester| sudo -S",a.getAbsolutePath(),"--deploymentFile=","\"",b.getAbsolutePath()};

还有在这里我得到了以下错误

getErrorStreamusage: sudo -h | -K | -k | -L | -V
getErrorStreamusage: sudo -v [-AknS] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
getErrorStreamusage: sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U user name] [-u
getErrorStream user name|#uid] [-g groupname|#gid] [command]
getErrorStreamusage: sudo [-AbEHknPS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user
getErrorStream name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>]
getErrorStreamusage: sudo -e [-AknS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user
getErrorStream name|#uid] file ...

最佳答案

须藤

我强烈建议编辑 sudoers 文件并允许运行应用程序的用户通过 sudo 使用特定命令而不提示输入密码,而不是执行 echo passwd | sudo ... 构造。

这样您就可以避免在应用程序或配置文件中以明文形式(或最好是稍微混淆)存储密码,并且您可以避免使用调用 sudo 等的 shell 脚本来调用 shell。

Sudoers 可以通过命令 visudo 进行编辑。看这里作为一个例子,它是如何在 unbuntu 上完成的,但它在任何 unix 上都是一样的。 https://askubuntu.com/questions/159007/how-do-i-run-specific-sudo-commands-without-a-password

附加引用:https://www.sudo.ws/man/1.8.16/sudoers.man.html

不过我觉得你问错了问题......

Mac 上的授权

在需要执行需要额外权限的操作的 mac 应用程序不应该使用 sudo 开始。

应用应该改用授权服务。

引用资料:

关于java - 如何在 Java 中为 OS X 运行 sudo 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37388236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com