RFC:ssh -X 通过 SHELL 变量登录时运行 java 应用程序、安全性和其他问题?

RFC:ssh -X 通过 SHELL 变量登录时运行 java 应用程序、安全性和其他问题?

我有一个java应用程序(不是小程序),我通过一个脚本运行它,其中包含以下内容:

#!/bin/sh
/usr/bin/java -classpath /A/B.jar:/X/Y.jar MyApp.Go -p 1 -p 2 -p 3

该应用程序在初始化期间需要读取大量与应用程序一起存在于本地磁盘中的辅助文件。这些文件有几 GB。该应用程序的 GUI 很简单:单击主窗口(地图),即可通过 启动脚本java.util.concurrent.ExecutorService。该脚本将进行一些处理并将其结果输出到文件中。然后应用程序读取该内容并将其呈现在新窗口中。唯一的按钮是退出。没有其他用户输入,没有文件选择器。

我需要一个解决方案来允许该应用程序远程运行。也就是说:应用程序+数据驻留在我的 Linux 服务器上,客户端需要从自己的计算机远程运行它。我想避免将应用程序发送给客户端。不仅因为我想隐藏代码(以避免反编译),还因为这些 GB 的本地数据也需要捆绑 - 不切实际。

我已经考虑过将其转换为小程序,但除了(大多数/所有)浏览器现在不支持它之外,该小程序必须在客户端计算机上运行,​​并且所有这些数据文件最终都需要从服务器读取并转移到小程序运行+初始化的地方,即客户端的计算机。又不实用了。

我还研究了一些将 java 字节码转换为 javascript 的应用程序,声称它们为您提供了在 HTML5 中运行的东西。这仅适用于玩具应用程序。

RFC: 最终我考虑在我的服务器中创建一个新用户,其 SHELL 将指向运行 java 应用程序的脚本(上面的脚本)。我已经允许X11Forwarding yes在我的服务器上进行 sshd 的配置,并告诉基于 Linux 的客户端只需执行以下操作:该应用程序就会出现在他们的桌面上。我还告诉基于 Windows 的客户端安装 X-server 并执行类似的操作。这在 Linux 上测试得很好(没有在 Windows 上尝试过)。ssh -X [email protected]

我正在寻找对我的方法的评论,尤其是有关安全性的评论。我很乐意为客户提供这样的有限帐户。但如果应用程序崩溃,我不希望客户端能够访问我的服务器中的 shell。

答案1

添加exec到您的脚本中:

#!/bin/sh
exec /usr/bin/java -classpath /A/B.jar:/X/Y.jar MyApp.Go -p 1 -p 2 -p 3

这将导致java进程取代运行脚本的shell进程,而不是成为shell的子进程。这样,一旦 java 进程启动,就不会返回 shell,并且如果 java 进程因任何原因终止,登录会话将立即结束。

相关内容