使用Java Spring在SSH上执行命令

时间:2016-03-14 12:38:52

标签: java spring ssh spring-boot

我和一位同事正在开发一个控制计算机集群的Web应用程序。这个计算机集群缺少API,所以我们需要能够使用Linux shell来控制和添加" jobs"通过bash脚本。每个用户都有一定的时间在群集上运行应用程序,因此我们需要能够使用用户凭据SSH到系统上,以便用户帐户用于提交作业。

使用Spring编写Web应用程序。我们已经对使用Java通过SSH执行命令进行了一些研究,并找到了Jcsh模块。但是我们的问题是,是否有一个Spring模块来执行此操作。我们很惊讶我们找不到一个,因为SFTP模块已经存在并且(如果我错了,请纠正我)使用相同的协议。

我们是否误读了文档,或者没有模块可以执行此操作?

非常感谢!

2 个答案:

答案 0 :(得分:1)

Jsch确实是那里最好的Java SSH实现。

可悲的是,Spring没有提供与它的任何集成。我个人不得不写定制管道来利用它。它是一个低级API,但该项目是很好的文档,具有很好的例子。

对于之前的项目,我为Jsch编写了一个类似API包装器的模板。可悲的是,我无法开源。

答案 1 :(得分:1)

我真的不认为Spring直接调用SSH是一个好主意。

因为如果你想直接调用SSH,你需要在你的应用程序中存储主机的密码,或者将私钥存储在你的应用程序中(也许这样更好,因为你可以使用Java的密钥库来保护你的私钥)

无论哪种方式,您都可以让应用程序能够执行主机允许的任何操作(并且由于您可以通过运行命令来控制主机的应用程序,因此我认为此用途具有很强的功能)。

这对计算机集群来说可能非常危险。

如果你确实需要通过SSH调用这些函数,我建议你编写一个小的本机应用程序(使用python或Java,你喜欢的任何东西),并设置你的应用程序的权限只能执行这个应用程序,这样更安全

因此,在Spring中获得SFTP支持是理智的,因为这是一个非常有用的数据传输,但让你的应用程序直接运行SSH是非常非常危险的,即使在家里,相信我。