我试图从java执行一些shell命令行。但似乎无法切换用户。我需要在切换用户时输入密码作为输入。
Runtime rtime = Runtime.getRuntime();
Process child = rtime.exec("/bin/sh \n");
BufferedWriter outCommand = new BufferedWriter(
new OutputStreamWriter(child.getOutputStream()));
outCommand.write("su - username");
System.out.println("user switched");
outCommand.flush();
outCommand.write("password");
System.out.println("password entered");
outCommand.flush();
outCommand.write("rm -rf test.txt");
System.out.println("file removed");
outCommand.flush();
outCommand.close();
答案 0 :(得分:1)
write
只是写出你给它的角色。它不会在它们之后执行换行,因此shell只会从该代码中看到su - usernamepasswordrm -rf -test.txt
。
BufferedWriter
有一个newLine
method用于为环境编写换行符序列(例如,使用line.separator
属性)。
E.g:
outCommand.write("su - username");
outCommand.newLine(); // ***
outCommand.flush(); // (I'd also probably put this before the output)
System.out.println("user switched");
outCommand.write("password");
outCommand.newLine(); // ***
outCommand.flush();
System.out.println("password entered");
// ...
附注:如果此代码将用于除您的计算机以外的任何地方,我建议您阅读有关密码的最佳做法。特别是,一般建议不要在String
中存储密码,即使是暂时的。相反,使用char[]
并尽可能少地保留密码,尽快用其他字符覆盖密码。这样可以防止密码在内存中以明文形式存放任何重要时间。