试图编写一个能够运行UNIX命令的Java程序作为另一个UNIX用户。 我有用户的密码,我知道我想运行的命令,但命令必须以该用户身份运行 – 所以我必须先以该用户身份login。
例如:假设我们有一个用户jim,他想查看bob的主目录中的内容,并且(无论出于何种原因)jim可以执行ls,而bob不能。 我们目前正在login作为鲍勃@H_404_4@ 。 以下是我们可以做的事情:
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'
总结以上是内存溢出为你收集整理的以不同的用户身份从Java运行UNIX命令全部内容,希望文章能够帮你解决以不同的用户身份从Java运行UNIX命令所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)