我的Java应用程序必须像这样工作:
su <user>
。这将是一个更大的应用程序的插件,所以像“尝试别的东西”(即RPC,Web服务)这样的答案将无法帮助我:(
据我所知,我必须使用SHELL或至少保持频道连接。
我测试了jsch,sshj和ethz.ssh2但结果不好。
我已经通过stackoverflow回答问题,例如:“发送命令到服务器通过jsch-shell-channel”等。但是他们都专注于在一行中发送整个命令。我需要一个交互式,持久的SSH会话。
我使用过ExpectJ(有一点输出流)。它已经解决了1,3,4,5点。
但是第2点出现问题。在我的应用中,我需要分开回答。但我们不知道他们的长度。命令提示可以不同。任何人都知道如何“破解”ExpectJ所以它会更加同步?我正在寻找这样的行为:发送,等待完整答案,发送,等待...... 我已经尝试了一些基本的同步技巧,但这通常会导致超时和连接丢失。
答案 0 :(得分:2)
您应该使用ExpectJ,the Unix expect
utility的Java实现。
答案 1 :(得分:0)
不确定你是否还有问题, 无论如何,它可能会对其他人有所贡献。
ExpectJ确实是Unix期望的Java实现。 你一定要购买“探索期望书”,然后看一下,这是值得的。
对于你的问题: 当您生成进程时,您将侦听返回输出,将其与提示匹配,然后发送一些命令。 如果要分析输出,则缓冲该输出,并在下一个send()
之前执行一些操作要这样做,您需要使用您使用的spawn类的interact()方法。 http://expectj.sourceforge.net/apidocs/index.html
以及互动及其运作方式: http://oreilly.com/catalog/expect/chapter/ch03.html 寻找这一部分:“互动命令”