【问题标题】:Ganymed SSH - Changing userGanymed SSH - 更改用户
【发布时间】: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 转换为实际答案。我会这样做,但我不配获得答案的声誉。

标签: java shell ssh


【解决方案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();
    ...

【讨论】:

  • 好吧,我想我明白了,但我没有。我该怎么写?使用 bufferedWriter.write("sudo reboot");结果一无所获。这个问题比我想象的更让我困惑
  • 你冲洗作家吗?我会将完整的代码添加到答案中。
  • 您好,感谢您的回复。我想出了如何使用 shell 发送命令: sess.requestPTY("bash"); sess.startShell(); BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sess.getStdin(), "utf-8")); wr.write("回声测试\n");但我似乎无法从服务器获取输出,有什么建议吗?非常感谢!
  • 我使用了 BufferedReader 和通道条件。看看 sess.waitForCondition()。我可以推荐的是将阅读放入观察者模式。这对我来说效果很好。
  • 不知道为什么这个评分被降级了?
猜你喜欢
  • 1970-01-01
  • 2011-07-03
  • 2014-02-26
  • 1970-01-01
  • 2021-05-31
  • 2017-06-14
  • 1970-01-01
  • 2018-09-08
  • 2015-05-06
相关资源
最近更新 更多