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

我正在尝试使用 java 1.8 和 OS Solaris 11 运行一个简单的命令。我的程序在特定用户下运行,并且该命令必须在 SuperUser 下运行


这是命令:


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 因为密码集中的某些内容不正确蝙蝠我不确定


我做错了什么?


RISEBY
浏览 710回答 3
3回答

Smart猫小萌

如何通过java中的runtime.exec()传递用户和密码如果您想使用su.Solarissu使用该getpass()函数从用户那里获取必要的密码。从Solarisgetpass()手册页:描述该getpass()函数打开进程的控制终端,将空终止字符串写入该设备prompt,禁用回显,读取字符串直到下一个换行符或 EOF,恢复终端状态并关闭终端。...错误如果出现以下情况,getpass()和getpassphrase()函数可能会失败:...ENXIO该进程没有控制终端。su 要么从控制终端获取密码,要么失败。这是一个深思熟虑的设计决策,几乎不可能执行不安全的操作,例如自动输入密码。

MYYA

非常感谢您的所有回答。但我的解决方案有点不同。决定使用可以从两个进程写入和读取的外部文件。整个目标是再次握手,以防在根运行的进程失败(看门狗)。所以现在不需要使用命令Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");当根进程开始运行时,它会将拍号记录到文件中。如果用户的进程(每X次读取文件)发现签名发生了变化,他将再次握手。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java