hchang   29 Aug 2022

X11 FORWARDING (SSH CONNECT)



리눅스 X11 포워딩(X11 Forwarding) - ssh 접속으로 GUI 프로그램 실행하기

원격에 있는 리눅스 서버에 ssh 접속해서 GUI 기반의 어플리케이션을 실행하기 위한 방법이다. 예를 들어 서버에 접속해서 해당 서버에 설치되어 있는 웹브라우저를 실행하면 웹브라우저 실행창이 클라이언트쪽에 표시되도록 하는 것이다.

X윈도우(X-Windows, X11) 기반의 기능이므로, 서버와 클라이언트 양쪽 다 X윈도우 기반이어야 한다는 점에 유의하자. 윈도우 운영체제에서 해당 내용을 진행하려면 클라이언트에 Xserver같은 소프트웨어가 설치되어있어야한다.

먼저 서버쪽 설정을 알아보자. 우분투 서버 기준이다. X11 포워딩에 필요한 xauth 패키지를 설치하자.(좋은 서버는 설치되어 있는 경우도 있다.)

# xauth 설치
sudo apt-get install xauth
# x11 - xeyes 설치 (테스트용)
sudo apt-get install x11-apps

/etc/ssh/sshd_config 파일을 편집해야 한다. 시스템 설정을 바꾸는 것이므로 루트(root) 권한을 필요로 한다.

sudo vi /etc/ssh/sshd_config

/etc/ssh/sshd_config 파일에서 아래와 같이 X11Forwarding 항목을 yes로 설정하자.

X11Forwarding yes

이제 홈 디렉토리에서 .Xauthority 파일을 새로 만들어 주자. 처음에 리눅스를 설치할 때 생성된 .Xauthority 파일로는 제대로 동작하지 않는 경우도 생기는 듯하다. chown, chmod 등으로 소유자나 권한을 변경하는 것으로는 잘 안되는 것 같고 그냥 맘 편하게 새로 만드는게 가장 확실한 듯.

홈 디렉토리로 이동

cd ~

혹시 모르니 기존의 .Xauthority 파일 백업

mv .Xauthority .Xauthority.old

.Xauthority 파일 생성

touch .Xauthority

제대로 설정되어 있지 않다면 클라이언트에서 접속할 때 “timeout in locking authority file ~/.Xauthority” 이런 식의 오류 메시지가 나올 것이다. 물론 X11 포워딩도 동작하지 않는다. 이 상태에서 GUI 어플리케이션을 실행하면 “X11 connection rejected because of wrong authentication” 오류가 발생.

서버쪽 설정은 이것으로 완료되었다.

이제 클라이언트쪽 설정을 할 차례다. 클라이언트의 X11 포워딩 기능을 활성화하자. 모든 사용자에 대해 설정하고 싶다면 /etc/ssh/ssh_config 파일을 편집하고, 현재 사용자에 대해서만 설정하고 싶다면 /etc/ssh/ssh_config 파일을 ~/.ssh/config 파일로 복사한 후 편집한다. 아래의 예시는 현재 사용자에 대해 X11 포워딩 설정을 하는 경우이다.

홈 디렉토리 아래에 .ssh 디렉토리 생성

mkdir ~/.ssh

/etc/ssh/ssh_config 파일을 복사하여 ~/.ssh/config 파일로 생성

cp /etc/ssh/ssh_config ~/.ssh/config

이제 ~/.ssh/config 파일을 편집한다.

vi ~/.ssh/config

~/.ssh/config 파일에서 ForwardX11 항목을 yes로 설정하면 된다.

Host * ForwardX11 yes

설정을 마쳤으면 서버에 ssh 접속을 할 때 -X 옵션을 사용해서 X11 포워딩을 활성화할 수 있다.

server.net 서버에 접속, 사용자 john

ssh -X john@server.net

파이어폭스 웹브라우저 실행(클라이언트쪽에 실행창이 표시된다)

firefox