试图编写一个能够运行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'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。