我的 Java 应用程序必须像这样工作:
- 用户在 GUI 中选择 bash 命令并按“发送”。
- 应用程序为每个命令返回不同且独立的答案(例如,我们可以将它们存储在不同的文件中)。
- 每个命令都以交互方式运行,而不是批量运行(不能像“ls\n pwd \n”等)
- 在每个命令之后,应用程序将检查结果是否正常。如果是这样,它将发送下一个命令。
- 我们需要
su <user>
在远程主机上执行。
这将是一个更大应用程序的插件,因此“尝试其他”(即 RPC、Web 服务)之类的答案对我没有帮助:(
据我了解,我必须使用 SHELL 或至少保持通道连接。
我已经测试过 jsch 、 sshj 和 ethz.ssh2 但结果很糟糕。
我已经通过stackoverflow对以下问题的答案进行了挖掘:“sending-commands-to-server-via-jsch-shell-channel”等。但它们都专注于在一行中发送整个命令。我需要一个交互式的、持久的 SSH 会话。
我用过ExpectJ(对输出流做了一点修改)。它已经解决了第 1、3、4、5 点。
但是第 2 点存在问题。在我的应用程序中,我需要得到单独的答案。但我们不会知道它们的长度。命令提示符可以不同。任何人都知道如何“破解”ExpectJ,所以它会更加同步吗?我正在寻找这样的行为:发送,等待完整答案,发送,等待......我尝试了一些基本的同步技巧,但这通常会导致超时和连接丢失。