【发布时间】:2016-12-23 21:02:04
【问题描述】:
我想自动化我在多台机器上执行的一些任务。我想使用 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 的可能性,但我没有写入它,而且我似乎无法找到它的任何示例。
提前致谢。
【问题讨论】:
-
如果要执行多个命令。您必须请求一个伪终端并启动一个 shell。命令是 Session.requestPTY() 和 Session.startShell()。
-
@Mr.Stef 我将如何写入这个 shell?使用会话我可以选择执行命令,我认为 shell 不是这种情况
-
你必须得到外流。 outstream = this.session.getStdin() 然后你可以使用 Writer。 final BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(this.outputStream));
-
请你们中的某个人将答案从 cmets 转换为实际答案。我会这样做,但我不配获得答案的声誉。