使用Java Spring在SSH上执行命令

3
我和同事正在开发一个Web应用程序,用于控制计算机集群。该计算机集群缺乏API,因此我们需要能够使用Linux shell通过bash脚本控制和添加“作业”。每个用户在集群上运行应用程序的时间有限,因此我们需要能够使用用户凭据SSH登录系统,以便他们的用户帐户用于提交作业。
Web应用程序使用Spring编写。我们已经研究了使用Java通过SSH执行命令,并找到了Jcsh模块。但是我们的问题是是否有一个Spring模块来完成这个任务。我们很惊讶地发现没有找到这样的模块,因为SFTP模块已经存在,而且(如果我没记错的话)使用相同的协议。
我们是误读了文档还是真的没有这个模块?
非常感谢!

请查看:http://www.crashub.org/1.3/reference.html#_ssh_connector(可能有离题评论) - Jayan
2个回答

3
我认为直接通过Spring调用SSH并不是一个好主意。
如果您想直接调用SSH,您需要将主机密码存储到应用程序中,或者将私钥存储在应用程序中(也许这更好,因为您可以使用Java的密钥库来保护您的私钥)。
无论哪种方式,您都会使应用程序能够执行主机允许的任何操作(由于您可以通过运行命令控制主机的应用程序,我假设此用途具有极大的权力)。
这可能对计算机集群非常危险。
如果确实需要通过SSH调用函数,我建议您编写一个小型本地应用程序(使用Python或Java任何您喜欢的语言),并设置权限,使得您的应用程序只能执行该应用程序,这样会更加安全。
因此,在Spring中支持SFTP是明智的,因为这是一种非常有用的数据传输方式,但是让您的应用程序直接运行SSH非常非常非常危险,即使在家里也一样,请相信我。

谢谢您的回复。安全对我们来说是一个主要问题,因为从Web运行计算机集群确实会引起一些问题。这就是为什么我们不存储密码和/或密钥,并且每次用户想要使用集群时都会要求他们提供凭据。集群通过提交bash脚本来运行,所以我真的看不到除了ssh连接之外的其他方法来做到这一点。编辑:ssh连接并非始终打开,而是在需要运行命令时使用每个用户的凭据建立新连接。 - user3157264
因此,我建议您创建一个小的Python(Bash或任何应用程序,并提供API),例如:cluster add_user death_pool -u root -p the_password cluster grant_user death_pool sucker -u root -p the_password然后,您可以通过Java进程调用此应用程序,而不是直接使用SSH。这样做比使用SSH连接更好(如果需要,您可以在应用程序中汇集SSH连接),在某些方面,速度也会更快。为了实现集成,Spring将支持任何数据端点,SSH不是数据端点。 - guitarpoet

1
Jsch是目前最好的Java SSH实现。可惜的是,Spring没有与其进行任何集成。我个人不得不编写自定义的代码来使用它。这是一个低级API,但该项目有很好的文档和示例。在之前的项目中,我为Jsch编写了类似模板的API封装,但遗憾的是我无法开源它。

谢谢你的回答!很遗憾它不可用,我想我们必须自己编写 :( - user3157264

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接