【发布时间】:2016-07-07 13:58:46
【问题描述】:
我尝试通过 Java 应用程序将密码传递给 smbpassword,这里我如何通过终端进行传递:
(echo newPassword; echo confirmPassword) | smbpasswd -a -s client1
并且输出显示该命令很好地完成了:
Added user client1
但是,我无法通过 Java 应用程序完成此操作,这里是我使用的代码:
public void run(String command, String[] prompt) {
try {
String[] args = new String[] {"/bin/bash","-c","echo " + rootPassword + "| sudo -S " + command};
Process proc = new ProcessBuilder(args).start();
if (prompt != null && prompt.length > 0) {
for (int i = 0; i < prompt.length; i++) {
proc.getOutputStream().write((prompt[i] + "\r\n").getBytes());
proc.getOutputStream().flush();
}
}
proc.waitFor();
String output = "";
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
output += line + "\n";
}
System.out.println(output);
input.close();
}
catch (Exception ex) {
System.out.println(null, ex.getMessage());
}
}
我尝试像这样使用 OutputStream:
String[] pipe = { password, password };
run("smbpasswd -s -a " + username, pipe);
或像管道一样:
run("(echo " + password + "; echo " + password + ") | smbpasswd -s -a " + username, null);
但两者都不起作用,我没有输出,并且在我通过pdbedit -L 检查后似乎没有创建用户。但是,我可以通过该函数使用管道执行另一个命令,例如echo username:password | chpasswd。
有什么想法吗?
提前致谢。
【问题讨论】:
标签: java ubuntu automation samba