java - 如何通过 runtime.exec() 在 java 中传递用户和密码

标签 java sh solaris runtime.exec

我正在尝试使用 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/

相关文章:

java - 注释的处理发生在哪里?

java - 如何在命令行中通过 Apache Ant 样式变量替换设置 tomcat 的上下文属性?

c++ - 将旧的 C++ 代码从 Solaris 移植到 Linux

linux - 如何在不使用 crontab 的情况下在后台连续运行脚本

java - 调试 "Too many files open"问题

java - 未找到 ant junit 引用

linux - 传播由子执行脚本完成的变量更改

linux - 一般如何将可执行文件添加到用户路径

function - 如何判断 POSIX shell 中是否存在某个函数?

python - 如何在 sunOS 启动时运行我的 python 脚本