Ruj*_*uju 3 java linux bash shell ubuntu
我试图通过在输出流中发送密码来从 java 程序更改 linux 中的用户密码,但没有完成。
我的java程序就像
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();
Run Code Online (Sandbox Code Playgroud)
我的程序在这里失败并要求输入密码,但我不想要这种情况。
有没有可能从java程序提供密码?你能建议我吗,我将如何成功地做到这一点,或者是否有任何可用的 shell api。
当我尝试使用 shell 脚本并从我的 java 程序调用它时,同样的事情成功完成
Process process = Runtime.getRuntime().exec("bash first.sh");
Run Code Online (Sandbox Code Playgroud)
我的shell脚本是
i="123456"
echo -e $i"\n"$i|sudo -S passwd sampleuser
Run Code Online (Sandbox Code Playgroud)
它成功地更改了用户密码。
它会要求输入密码。看看你的shell脚本。您执行一个要求超级用户权限的命令( sudo
)。除非您以超级用户身份运行,否则您的程序将提示输入密码。
分解你的 shell 脚本:
i="123456"
echo -e $i"\n"$i|sudo -S passwd sampleuser
Run Code Online (Sandbox Code Playgroud)
sudo -S
方法 :
-S (stdin) 选项使 sudo 从标准输入而不是终端设备读取密码。密码后必须跟一个换行符。
这就是您的脚本正在做的事情,它passwd
为您的sampleuser
as设置 password( ) i
。并且由于您正在使用-S
它正在从标准输入中读取,您已经为其提供了变量i
。而您正在以超级用户的身份做这一切!记在脑子里。
现在回顾一下您的 Java 程序并尝试进行相应的更改。运行程序时是否具有超级用户权限?不,你没有。