为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2021-08-19 18:28:53
我正在尝试使用 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 = 1BufferedReader pArgs= new BufferedReader( new InputStreamReader(proc.getInputStream()));if((line=pArgs.readLine()) != null){    //do something}else{    //something not working = ERROR }我认为该行等于 null 因为密码集中的某些内容不正确蝙蝠我不确定我做错了什么?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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

如果您想使用su.

Solarissu使用该getpass()函数从用户那里获取必要的密码。

从Solarisgetpass()手册页:

描述

getpass()函数打开进程的控制终端,将空终止字符串写入该设备prompt,禁用回显,读取字符串直到下一个换行符或 EOF,恢复终端状态并关闭终端。

...

错误

如果出现以下情况,getpass()getpassphrase()函数可能会失败:

...

ENXIO

该进程没有控制终端。

su 要么从控制终端获取密码,要么失败。

这是一个深思熟虑的设计决策,几乎不可能执行不安全的操作,例如自动输入密码。


查看完整回答
反对 回复 2021-08-19
?
MYYA

TA贡献1868条经验 获得超4个赞

非常感谢您的所有回答。但我的解决方案有点不同。决定使用可以从两个进程写入和读取的外部文件。整个目标是再次握手,以防在根运行的进程失败(看门狗)。

所以现在不需要使用命令

Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");

当根进程开始运行时,它会将拍号记录到文件中。如果用户的进程(每X次读取文件)发现签名发生了变化,他将再次握手。


查看完整回答
反对 回复 2021-08-19
  • 3 回答
  • 0 关注
  • 709 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信