使用Java通过SSH进行“智能”脚本编写

时间:2018-08-21 08:41:56

标签: java ssh jsch

我想编写一个程序来控制远程服务器上的工具。为此,我想创建一个SSH方法来连接到远程服务器并执行一些命令来获取一些数据。遗憾的是,我找不到正确处理SSH部分的方法。

以下是流程图,显示了该方法应该能够执行的操作: Example Flowchart

首先,我想通过SSH连接到远程服务器。我用“ JSch”成功地尝试了这一点。

此后,该方法应在外壳中输入命令ls -l并等待响应。现在,它应该解析输出,并根据输出采取不同的操作。

如果存在一个名为“ folder123”的文件夹,则下一个命令应更改为该文件夹(cd folder123),然后在其中再次输入ls -l。然后应返回此内容列表,并可以关闭ssh连接。

如果该文件夹不存在,则程序应创建一个(mkdir folder123),然后返回代码(-1)。

在我的主程序中,我将使用新数据做出一些决定,然后继续。

我找到了使用JSch来执行一个命令(例如ls -l甚至多个命令)并以字符串形式返回响应的方法。可悲的是,我为此必须将所有命令传递给一个块,因此我无法在其中进行决策。当我要执行决策时,必须先关闭连接。这将导致大量的连接建立开销,尤其是当做出多个决定并且我之间有多个导航步骤时。

那么在保持连接建立的同时,有没有办法做出决定,所以我可以直接在它之后输入下一个命令?

编辑: 我现在正在玩。因此,我使用多个命令的解决方案基本上就是Mihail在此post

中的答案

对于这部分任务,使用DaveyDaveDave和Aaron提出的方法会更简单。但是我必须做一些更具体的任务。我认为最好先提供一个简单的示例,但这是另一个需要在远程服务器上使用程序的示例:

Another Example

建立ssh连接(访问该服务器的唯一非图形方式)后,我必须登录该工具(这是命令行的单行代码)。

在cmd中,并通过我的ssh连接中的命令,在此之后我得到输出。它显示了有关用户的一些信息,并以单词“ END”结尾,在其上方我有一个返回码。该函数必须等待“ END”,然后解析返回代码。取决于它,该功能应重试或输入下一个命令。

在下一条命令之后,它必须执行相同的验证,并且直到现在一切正常为止,最后的输出应该返回到主程序(在此,它包含网络元素和有关它们的信息)。

1 个答案:

答案 0 :(得分:0)

在另一个线程中,我提出了一个更具体的问题,找到了适合我问题的答案。

如果您遇到类似的问题,请看这里:

Change System.in and read System.out programmly on the fly (Jsch)

相关问题