Linux

RFC:ssh -X 通過 SHELL 變數、安全性和其他問題在登錄時執行 Java 應用程序?

  • August 31, 2021

我有一個 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. 該腳本將進行一些處理並將其結果輸出到文件中。然後應用程序讀取並呈現到新視窗。唯一的按鈕是退出。沒有其他使用者輸入,沒有文件選擇器。

我需要一個解決方案才能讓這個應用程序遠端執行。也就是說:app+data 駐留在我的 linux-server 上,客戶端需要從他們自己的電腦上遠端執行它。我想避免將應用程序發送給客戶端。不僅因為我想隱藏程式碼(以避免反編譯),還因為那些 GB 的本地數據也需要捆綁在一起 - 不切實際。

我已經考慮將其轉換為小程序,但除了(大多數/所有)瀏覽器現在不支持它之外,該小程序必須在客戶端電腦上執行,並且最終需要從伺服器讀取所有這些數據文件並轉移到小程序正在執行+初始化的位置,即客戶端的電腦。又不實用了。

我還查看了一些將 java 字節碼轉換為 javascript 的應用程序,聲稱它們為您提供了在 HTML5 中執行的東西。這僅適用於玩具應用程序。

RFC: 最終我考慮在我的伺服器中創建一個新使用者,其 SHELL 將指向執行 java 應用程序的腳本(上面的腳本)。我已經X11Forwarding yes在我的伺服器上允許了 sshd 的配置,並告訴基於 linux 的客戶端只是這樣做:ssh -X abc@X.Y.Z.M並且該應用程序將出現在他們的桌面上。我還告訴基於 Windows 的客戶端安裝 X 伺服器並執行類似的操作。這在 linux 上測試得很好(沒有在 windows 上試過)。

我正在尋找對我的方法的評論,尤其是關於安全性的評論。我很樂意為客戶提供這樣的有限帳戶。但是如果應用程序崩潰,我不希望客戶端在我的伺服器中找到對 shell 的訪問權限。

添加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程序因任何原因死亡,登錄會話將立即結束。

引用自:https://unix.stackexchange.com/questions/666986