我正在尝试使用 java 1.8 和操作系统 Solaris 11 运行一个简单的命令。 我的程序在特定用户下运行,命令必须在 super 用户下运行
命令如下:
Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");
如果我运行命令,它会正常工作并要求输入密码,然后输入密码,我将得到结果。
问题是我在 java 中运行它 这是我的代码
Process proc = Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");
PrintWriter out = new PrintWriter(new OutputStreamWriter(proc.getOutputStream()));
out.println(password);
out.flush();
int exitCode= proc.waitFor();
System.out.println(exitCode);//exitCode = 1
BufferedReader pArgs= new BufferedReader( new InputStreamReader(proc.getInputStream()));
if((line=pArgs.readLine()) != null)
{
//do something
}
else
{
//something not working = ERROR
}
我认为该行等于 null 因为密码集中的某些内容不正确,我不确定
我做错了什么?
最佳答案
我可能会提出一个完全不同的方法来解决这个问题。与其尝试运行动态要求输入密码的 shell 命令,不如让命令不需要密码。
如果它只是要求输入密码,因为它需要 root,您可以在 root 下的 sudoers 文件中添加一行,说明您的程序用户可以像 root 一样执行该特定命令:https://www.linux.com/blog/configuring-linux-sudoers-file .
这也会更安全,因为您不会让密码在代码中 float 。
关于java - 如何通过 runtime.exec() 在 java 中传递用户和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079256/