我想自动执行我在多台计算机上执行的一些任务。我想使用Ganymed的SSH2库来完成这项任务。我已经能够运行多个命令,从服务器获取响应以及其他一些小事情。问题是你每个会话只能执行一个命令,这就是为什么我的执行方法如下所示,以便允许我使用一个方法来执行多个命令:
public String execCmd(String cmd) throws IOException {
sess = conn.openSession();
sess.execCommand(cmd);
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
String result = br.readLine();
br.close();
sess.close();
return (result);
}
问题是我似乎无法使用“su”+用户名更改我的用户。我读到“su”命令打开一个新的shell导致了这个问题。
现在 - 解决这个问题最干净的方法是什么?我读到了使用这个库打开shell的可能性,但我没有写到它,我似乎无法找到它的任何例子。
提前致谢。
答案 0 :(得分:1)
如果要执行多个命令。您必须请求伪终端并在之后启动shell。从session对象获取outstream来执行命令。
...
sess.requrequestPTY();
sess.startShell();
Outstream outstream = sess.getStdin();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outstream));
final String cmd = new String(command);
bufferedWriter.write(cmd);
bufferedWriter.flush();
...