Google Cloud Run에서 실행되는 Ubuntu 20.04.3 Docker 컨테이너에서 애플리케이션을 시작하거나 터미널 명령을 실행하는 방법은 무엇입니까?

Google Cloud Run에서 실행되는 Ubuntu 20.04.3 Docker 컨테이너에서 애플리케이션을 시작하거나 터미널 명령을 실행하는 방법은 무엇입니까?

Google Cloud Run의 클라우드에서 Ubuntu 20.04.3 데스크톱을 실행하고 있습니다. 컨테이너 이미지를 로컬에서 실행하면 bash 터미널을 포함한 모든 프로세스를 실행할 수 있습니다.

하지만 noVNC를 통해 연결된 Google Cloud Run에서는 Chrome을 제외한 터미널이나 다른 프로세스를 시작할 수 없습니다. 그래서 몇 가지 다른 브라우저 기반 터미널 솔루션을 시도했고 이것이 제가 찾은 것입니다.

Node.js에서 Spawn 사용

Spawn과 리버스 쉘 Node.js 웹 서버를 사용하여 터미널 명령을 전달할 수 있습니다. 예를 들어, localhost:xxxx/exec?q=ls는 현재 작업 디렉터리에 있는 파일을 나열합니다. 명령을 실행할 수도 있습니다.

WebSSH2 및 shellinabox

두 솔루션 모두 SSH를 사용하여 브라우저 클라이언트를 SSH 서버에 연결합니다. 로그인할 수 있지만 명령을 실행하면 다음과 같은 출력이 표시됩니다.

root@localhost:~# ls

[1] stopped            ls --color=auto
root@localhost:~# ls

보시다시피 루트로 SSHing을 시도했지만 Node.js의 generate 메서드를 사용하여 셸 명령을 실행하지 않는 한 여전히 어떤 명령도 실행할 수 없습니다.

상황에 맞게 Ubuntu, fluxbox, xvfb를 로컬로 실행하고 noVNC를 사용하여 브라우저를 통해 데스크톱에 액세스하는 모습은 다음과 같습니다. 로컬에서는 모든 것이 잘 작동합니다. ls홈 폴더에서 실행하여 거기에 어떤 파일이 있는지 확인할 수 있습니다.

noVNC를 통한 Ubuntu 데스크탑 컨테이너 이미지

Google Cloud Run에서 동일한 이미지를 실행하면 나타나는 모습입니다. 이 ls명령은 다음만 반환합니다 stopped [1].

Google Cloud Run에서는 명령어가 실행되지 않습니다.

Node.js 리버스 쉘의 모습은 다음과 같습니다. 여기서는 ls/usr/bin 폴더에서 실행할 수 있음을 알 수 있습니다 . 이것이 파일 시스템을 탐색하고 어떤 권한이 설정되어 있는지 확인하고 Google Cloud Run에서 실행되는 컨테이너에 명령을 실행할 수 있는 유일한 방법입니다.

Google Cloud Run에서는 Node.js 역방향 셸을 통해 명령어를 실행할 수 있습니다.

Node.js 역방향 프록시를 사용하여 파일에 대한 권한을 완화하더라도 WebSSH2 또는 shellinabox를 사용할 때처럼 명령을 chmod -R 777 /usr실행할 수 없습니다 .ls

쉘 명령과 프로세스가 심지어 루트로서 실행되는 것을 막을 수 있는 것은 무엇입니까?

관련 정보