首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以从java程序更改linux中的用户密码吗?

问我可以从java程序更改linux中的用户密码吗?
EN

Stack Overflow用户
提问于 2012-06-01 15:34:41
回答 3查看 3.4K关注 0票数 3

我试图通过在输出流中发送密码来从java程序中更改linux中的用户密码,但没有完成。

我的java程序是这样的

代码语言:javascript
复制
Process process = Runtime.getRuntime().exec("sudo passwd sampleuser");

OutputStream outputStream = process.getOutputStream();

InputStream inputStream = process.getInputStream();

PrintWriter printWriter=new PrintWriter(outputStream);

printWriter.write("123456");

printWriter.write("\n");

printWriter.flush();

我的程序在这里失败,它要求密码,但我不想这种情况。

有没有可能从java程序中提供密码?你能建议我,我将如何成功地完成它,或者有任何shell api可用于它。

当我尝试使用shell脚本并从我的java程序中调用它时,同样的事情也成功了。

代码语言:javascript
复制
Process process = Runtime.getRuntime().exec("bash first.sh");

我的shell脚本是

代码语言:javascript
复制
i="123456"

echo -e $i"\n"$i|sudo -S passwd sampleuser

修改用户密码成功。

EN

回答 3

Stack Overflow用户

发布于 2012-06-01 15:39:35

它将要求输入密码。看看您的shell脚本。您可以执行请求超级用户权限(sudo)的命令。除非您以超级用户身份运行,否则程序将提示输入密码。

要分解shell脚本,请执行以下操作:

代码语言:javascript
复制
i="123456"

echo -e $i"\n"$i|sudo -S passwd sampleuser

sudo -S的意思是:

-S (stdin)选项使sudo从标准输入而不是终端设备读取密码。密码后面必须跟换行符。

这就是您的脚本正在做的事情,它将sampleuser的密码(passwd)设置为i。由于您使用的是-S,因此它是从标准输入读取的,您已经为标准输入指定了变量i。而您是以超级用户的身份完成所有这些工作的!请记住这一点。

现在回过头来看看您的java程序,并尝试相应的更改。当你运行你的程序时,你有超级用户特权吗?不,你不知道。

票数 5
EN

Stack Overflow用户

发布于 2012-06-01 15:44:32

我不确定你的方法为什么会失败。我认为passwd使用了不同的流。

但是使用ExpectJ来实现这一点。它就是为这样的情况而设计的。

票数 0
EN

Stack Overflow用户

发布于 2017-05-18 22:11:07

如果有人在寻找答案,我只需要用下面这几句话找到一种方法:

代码语言:javascript
复制
try {
    Process p = Runtime.getRuntime().exec(new String[] {"sudo", "/bin/sh", "-c", "echo \"user:newpassword\" | sudo chpasswd"} );
    p.waitFor();
} catch (IOException | InterruptedException e1) {
    e1.printStackTrace();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10846255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档