微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以不同的用户身份从Java运行UNIX命令

试图编写一个能够运行UNIX命令的Java程序作为另一个UNIX用户我有用户密码,我知道我想运行的命令,但命令必须以该用户身份运行 – 所以我必须先以该用户身份login。

例如:假设我们有一个用户jim,他想查看bob的主目录中的内容,并且(无论出于何种原因)jim可以执行ls,而bob不能。 我们目前正在login作为鲍勃 。 以下是我们可以做的事情:

bob@host$ su jim && ls ~bob

问题是,我们得到了吉姆的密码提示。 由于这是从一个Java程序运行,即

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

我们得到提示inputjim的密码并挂断电话。 我们知道吉姆的密码 。 但是,我不能进入它。

如何更改MysqL的root密码

在linux上添加bash脚本来创build用户

如何从Active Directory获取用户密码到期date?

如何影响python内buildpwd模块

Windows 8的地铁 – 如何使密码文本框?

另外,我们不能使用Expect脚本(没有安装它),我们不能成为超级用户。 我也研究过使用SSH来尝试这个,因为我们可以在技术上做到这一点

bob@host$ ssh jim@host "ls ~bob"

但是这也不起作用,因为我没有权限设置无密码的SSH。

我最后的努力是尝试使用Java库的SSH库,因为Java程序可以使用密码,我可以用这个密码login(并执行正确的命令)。 但是因为我将要在同一个主机上运行,​​所以看起来好像过火了。

有什么build议么?

PS:Java版本1.4.2,不能升级; AIX UNIX 5.3。

ssh无密码两台电脑一样的networking

批处理脚本 – 访问Windows Credential Manager密码(或者如何encryption和使用密码

encryption开放源码桌面应用程序的磁盘密码

Microsoft Crypto API禁用使用RSAES-OAEP密钥传输algorithm

SALT在密码后面或之前是在哪里?

安装sudo,让用户运行在/ etc / sudoers中输入的Java程序,并使用sudo -u jim ls ~bob 。

问题解决了。 使用JSch( http://www.jcraft.com/jsch/ )以已知的用户名密码SSH连入服务器,并执行命令。 谢谢你的建议!

可能是Expect的Java实现? ExpectJ出现时,谷歌搜索,但我找不到有关1.4.2下运行的任何文档。

你有没有尝试重定向sudo命令输入和写入。 我有一段时间没有使用Java,但我相信有一种方法获取输入流并写入它。 你可以用它来写一个新的密码,sudo或su应该接受密码

使用getInputStream()并写出你的密码

su jim -c ls ~Bob

也许这将工作:

Process process = Runtime.getRuntime().exec("su jim && ls ~bob"); OutputStream standardInput = process.getoutputStream(); Writer standardInputWriter = new OutputStreamWriter(standardInput); standardInputWriter.write("passwordn"); standardInputWriter.close();

我不确定这个代码

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

将在shell中执行,需要评估&&,这是一个shell命令(/ bin / sh)。 你应该通过su命令行来传递命令“ls〜bob”。 就像是:

su jim -c 'ls ~bob'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐