Ganymed SSH - 更改用户

时间:2016-12-22 15:23:10

标签: java shell ssh

我想自动执行我在多台计算机上执行的一些任务。我想使用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的可能性,但我没有写到它,我似乎无法找到它的任何例子。

提前致谢。

1 个答案:

答案 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();
    ...