개념 정리/기본 개념

[X11 포워딩] ssh -X 접속 후, Docker 포트 바인딩하는 방법

jeonga 2023. 12. 27. 10:47

* 복붙 안되는 글은 개발자도구 설정에서 disable javescript 하시면 됩니다.

* wsl에서 ssh -X로 ubuntu 서버에 접속하여 X11 서버 바인딩하는 것은 저번글과 같이 진행함

 

ssh -X로 서버 접속 이후, docker와 ubuntu 서버의 포트를 바인딩해서

docker 내부에서 x11-apps를 실행할때 local에서 화면이 보여야 함.

 

1. Windows local 환경 (wsl 터미널)

sudo vi /etc/ssh/sshd_conig

X11Forwarding yes

X11UseLocalhost no

 

그리고 sudo service ssh restart 진행하기

(오류가 생긴다면 다음 코드 블록을 참고)

sudo ssh-keygen -A
sudo /etc/init.d/ssh start
sudo service ssh restart

 

2. 원격 Linux 환경 (ssh -X username@ip_address)

* VScode에서는 F1 > ssh config 옵션에서 ForwardX11 yes를 지정해주면 됩니다.

 

.Xauthority를 현재 폴더로 복사하기 (docker-compose.yml 위치)

cp /home/[username]/.Xauthority .

 

3. 원격 Linux 환경의 docker-compose.yml 수정하기

* 필수!! 라고 적힌 부분을 중심으로 custom 해주면 됩니다.

version: '3.7'
services:
  internimage:
    container_name: internimage
    network_mode: host # 필수!!
    image: internimage:latest
    volumes:
      - .:/home/user/
      - $HOME/.Xauthority:/root/.Xauthority:rw # 필수!!
      - /tmp/.X11-unix:/tmp/.X11-unix # 필수!!
    privileged: true # 필수!!
    stdin_open: true # 필수!!
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            device_ids: ['2', '3']
            capabilities: [gpu]
    environment:
        - GRANT_SUDO=yes
        - DISPLAY=${DISPLAY} # 필수!!
    ipc: host
    tty: true

 

혹여나 ports 옵션이 들어가신다면 전부 제거하세요~

 

* 혹시라도 error가 뜨신다면, wsl local 환경에서 터미널 열고 ssh -X로 똑같이 서버로 진입하신뒤에

터미널 띄워두시고 vscode에서 xeyes로 테스트해보세요