通过 ssh 在远程服务器上运行多个不相关命令的 Java 库

标签 java shell ssh expectj

我的 Java 应用程序必须像这样工作:

  1. 用户在 GUI 中选择 bash 命令并按“发送”。
  2. 应用程序为每个命令返回不同且独立的答案(例如,我们可以将它们存储在不同的文件中)。
  3. 每个命令都以交互方式运行,而不是批量运行(不能是“ls\n pwd\n”等)
  4. 在每个命令之后,应用程序将检查结果是否正确。如果是,它将发送下一个命令。
  5. 我们需要执行su <user>在远程主机上。

这将是一个更大应用程序的插件,所以像“尝试其他东西”(即 RPC、网络服务)这样的回答对我没有帮助:(

据我所知,我必须使用 SHELL 或至少保持 channel 连接。

我已经测试了 jsch 、 sshj 和 ethz.ssh2 但结果不佳。

我已经通过 stackoverflow 寻找问题的答案,例如:“通过 jsch-shell channel 发送命令到服务器”等。但它们都专注于在一行中发送整个命令。我需要一个交互式的、持久的 SSH session 。

我使用过 ExpectJ(带有一些输出流)。它解决了第 1、3、4、5 点。

但是第 2 点有问题。在我的应用程序中,我需要得到单独的答案。但我们不会知道它们的长度。命令提示符可能不同。任何人都知道如何“破解” ExpectJ 所以它会更加同步吗?我正在寻找这样的行为:发送,等待完整答案,发送,等待... 我已经尝试了一些基本的同步技巧,但这通常会导致超时和连接丢失。

最佳答案

你应该使用 ExpectJ , the Unix expect utility 的 Java 实现.

关于通过 ssh 在远程服务器上运行多个不相关命令的 Java 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168025/

相关文章:

java - 使用POST方法发送数据,android studio单例

java - 使用空格作为分隔符

java - 使用蓝牙发送字符或字符串而不是 ASCII 代码

shell - Jenkins Pipeline 插件看似跳过命令

bash - 如何指定 Bourne shell(不是 sh)

python - 强制命令打开时 paramiko 不起作用

python - 有没有一种简单的方法可以消除使用 Python 的 Paramiko 库进行 SSH 并从远程计算机的 CLI 获取输出时出现的垃圾值?

java - 如何在 Spring Boot 2 中定义默认处理程序

bash - 如何在不 fork 子 shell 的情况下获取 shell 函数的输出?

git - Maven 对 Git 上托管的存储库的依赖