RFC: SHELL 변수, 보안 및 기타 문제를 통해 로그인할 때 ssh -X에서 Java 애플리케이션을 실행합니까?

RFC: SHELL 변수, 보안 및 기타 문제를 통해 로그인할 때 ssh -X에서 Java 애플리케이션을 실행합니까?

나는 Java 애플리케이션(애플릿 아님)을 가지고 있으며 다음을 포함하는 스크립트를 통해 이를 실행합니다.

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

애플리케이션은 초기화 중에 애플리케이션과 함께 로컬 디스크에 존재하는 많은 수의 보조 파일을 읽어야 합니다. 이러한 파일의 크기는 수 기가바이트입니다. 애플리케이션의 GUI는 간단합니다. 기본 창(지도)을 클릭하면 스크립트가 실행됩니다 java.util.concurrent.ExecutorService. 스크립트는 일부 처리를 수행하고 결과를 파일로 출력합니다. 그런 다음 애플리케이션은 해당 콘텐츠를 읽고 새 창에 렌더링합니다. 유일한 버튼은 종료입니다. 다른 사용자 입력이나 파일 선택기가 없습니다.

애플리케이션을 원격으로 실행할 수 있는 솔루션이 필요합니다. 즉, 애플리케이션과 데이터가 내 Linux 서버에 상주하고 클라이언트는 이를 자신의 컴퓨터에서 원격으로 실행해야 합니다. 클라이언트에게 애플리케이션을 보내는 것을 피하고 싶습니다. 디컴파일을 피하기 위해 코드를 숨기고 싶었을 뿐만 아니라, 해당 기가바이트의 로컬 데이터도 번들로 묶어야 하기 때문에 실용적이지 않았습니다.

나는 이것을 애플릿으로 변환하는 것을 고려했지만 (대부분의/모든) 브라우저가 현재 이를 지원하지 않는다는 사실을 제외하면 애플릿은 클라이언트 시스템에서 실행되어야 하며 모든 데이터 파일은 결국 서버는 애플릿이 실행되고 초기화되는 곳, 즉 클라이언트의 컴퓨터를 읽고 전송합니다. 더 이상 실용적이지 않습니다.

또한 Java 바이트코드를 Javascript로 변환하는 일부 애플리케이션을 조사했는데, HTML5에서 실행되는 기능을 제공한다고 주장했습니다. 이는 장난감 응용 프로그램에만 적용됩니다.

RFC: 결국 나는 SHELL이 Java 애플리케이션을 실행하는 스크립트(위의 스크립트)를 가리키는 내 서버에 새 사용자를 생성하는 것을 고려했습니다. X11Forwarding yes내 서버에 sshd를 구성하도록 허용 하고 Linux 기반 클라이언트에게 다음을 수행하도록 지시했습니다. 응용 프로그램이 데스크탑에 나타납니다. 또한 Windows 기반 클라이언트에 X 서버를 설치하고 비슷한 작업을 수행하도록 지시했습니다. 이것은 Linux에서 잘 테스트됩니다(Windows에서는 시도하지 않았습니다).ssh -X [email protected]

특히 보안과 관련된 내 접근 방식에 대한 의견을 찾고 있습니다. 나는 고객에게 이와 같은 제한된 계정을 제공하게 되어 기쁘게 생각합니다. 하지만 애플리케이션이 충돌하면 클라이언트가 내 서버의 셸에 액세스할 수 없도록 하고 싶습니다.

답변1

exec스크립트에 다음을 추가하세요 .

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

이렇게 하면 Java 프로세스가 쉘의 하위 프로세스가 되는 대신 스크립트를 실행하는 쉘 프로세스를 대체하게 됩니다. 이렇게 하면 Java 프로세스가 시작되면 쉘로 돌아갈 수 없으며 어떤 이유로든 Java 프로세스가 종료되면 로그인 세션이 즉시 종료됩니다.

관련 정보