需要调用的程序是ssh-keygen.exe,生成id_dsa和id_dsa.pub两个文件,需要输入3次信息,一次是文件名,后两次是2次回车。
我在java中调用echo 文件名|ssh-keygen.exe是可以的,但是后两次回车不知道如何输入。
在linux中,我用下面的程序可以输入两次回车,但是在windows中却不行。不知道如何解决。
另外不知道为什么调用echo 文件名|ssh-keygen.exe,执行的时候会变成echo 文件名 |ssh-keygen.exe,在|前多了一个类似空格的字符。
public void AddUser(String user, String passwd) {
try {
// 添加用户
Process process = Runtime.getRuntime().exec("useradd " + user);// Runtime.getRuntime().exec("ls");
InputStreamReader ir = new InputStreamReader(
process.getInputStream());
BufferedReader input = new BufferedReader(ir); String line; // 修改密码
process = Runtime.getRuntime().exec("passwd " + user); // 密码输入
OutputStreamWriter os = new OutputStreamWriter(process.getOutputStream());
BufferedWriter bw = new BufferedWriter(os);
bw.write(passwd + "\n");
bw.write(passwd + "\n");
//process.getOutputStream().write(passwd.getBytes());
//process.getOutputStream().write(passwd.getBytes()); // 返回正确结果
while ((line = input.readLine()) != null) {
System.out.println(line);
} // 返回错误结果
ir = new InputStreamReader(process.getErrorStream());
input = new LineNumberReader(ir);
while ((line = input.readLine()) != null) {
System.out.println(line);
}
process.getInputStream().close();
process.getOutputStream().close();
input.close();
ir.close(); } catch (java.io.IOException e) {
System.err.println("IOException " + e.getMessage());
}
}