검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Remotely Accessible Virtual Desktops
관련 글 : SSH와 VNC를 이용한 원격 접속 설정

  저번에 이어서 이번에는 가상 데스크탑을 이용한 원격 접속을 설정하는 포스팅입니다. 저번의 경우 로컬과 원격이 같은 데스크탑을 공유했기 때문에 원격에서 동시에 2명 이상이 접속할 수 없었고 로컬이나 원격 중 한 곳에서만 데스크탑을 사용할 수 있었습니다. 이번 포스팅은 그 제한을 타파하기 위해 '가상 데스크탑'이라는 것을 사용합니다. 말 그대로 가상의 데스크탑을 여러 개 띄워서 그 중 하나에 접속하는 것이죠.

  저번과 마찬가지로 이 포스팅은 데비안 기반(민트, 데비안, 우분투)의 배포판을 기준으로 작성되었습니다. 그리고 이전 글에 있는 내용을 이미 수행하여 SSH와 VNC 서버, Xfce 같은 가벼운 데스크탑 환경을 설치했음을 가정하고 설명합니다.


1. 가상 데스크탑 설정
  먼저 아래의 명령어를 통해 SSH로 원격 컴퓨터에 접속합니다. 당연하지만 port에는 SSH 서버의 포트 번호, username에는 로그인할 사용자명, your_server_ip에는 원격 컴퓨터의 IP를 적습니다.
ssh -p port username@your_server_ip
  접속하면 사용자의 홈 디렉토리 밑에 ".vnc"라는 디렉토리를 만듭니다. 맨 앞이 점(.)이니까 숨겨진 디렉토리가 되겠습니다. 그리고 그 밑에 xstartup이라는 파일을 만듭니다. 결과적으로 ~/.vnc/xstartup이라는 위치와 이름의 파일이 되겠군요. 이 파일은 데스크탑 환경이나 윈도우 매니저에 대한 설정을 담는 파일입니다. 이제 파일에 아래와 같은 내용을 적습니다.
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
xfce4-session
  만약 데스크탑 환경으로 Xfce가 아닌 다른 것을 사용한다면 데스크탑 환경을 실행하기 위한 마지막 줄의 명령어를 자신이 사용할 것에 맞춰 적습니다. Fluxbox의 경우 "fluxbox"라고 적으면 되고 LXDE의 경우 "lxsession"이라고 적으면 됩니다.

  이 파일은 스크립트 파일이므로 편집을 마친 후 실행 권한을 주는 것을 잊지 맙시다. 이제 SSH 연결을 끊습니다. 만약 여러 사용자에 대해 가상 데스크탑을 설정하려면 위 작업을 가상 데스크탑을 사용할 각 계정마다 반복해서 해줘야 합니다.


2. 가상 데스크탑 실행하기
  가상 데스크탑을 사용하기 위해 특정한 디스플레이 번호를 정해야 합니다. 다시 클라이언트에서 SSH를 사용하여 원격 컴퓨터에 접속합니다. 단, 이번에는 VNC에서 사용할 포트에 대해 SSH 터널을 뚫어 접속합니다.
ssh -p port -L 5910:localhost:5901 username@your_server_ip
  저번에도 설명했지만 "localhost"의 왼쪽에 있는 것이 로컬의 포트 번호고 오른쪽에 있는 것이 원격의 포트 번호입니다. 로컬의 5910 포트로 들어가는 트래픽은 SSH 터널을 이용해 "your_server_ip" 주소를 가진 원격 호스트의 5901 포트로 흘러갑니다. 물론 그 반대도 마찬가지입니다. "localhost"는 "your_server_ip" 주소의 원격 컴퓨터에게 있어서 localhost 입니다. 그러므로 별로 신경 쓸 필요는 없습니다.

  왼쪽에 있는 5910은 로컬에서 사용할 포트 번호이기 때문에 아무거나 사용해도 별 문제는 없습니다. 단, VNC의 디스플레이 번호에 5900을 더한 것이 해당 디스플레이 번호가 사용하는 포트 번호가 되기 때문에 5900 이상의 숫자여야 합니다. 또한 0번은 보통 로컬 화면으로 사용되므로 5901 이상의 디스플레이 번호를 사용하면 됩니다.

  오른쪽에 있는 5901은 원격에서 사용할 포트 번호이기 때문에 원격 호스트에서 VNC 서버를 실행할 때 넣는 디스플레이 번호와 맞춰야 합니다.

  이제 가상 데스크탑을 실행하겠습니다. SSH로 연결한 터미널에서 아래의 명령어를 실행합니다.
vncserver :1 -localhost -geometry 1100x700 -dpi 100 -depth 16
  "-localhost" 옵션은 저번 글에서 설명했으므로 넘어가고 다른 옵션들도 이름으로 뭘 의미하는지 알 수 있으니 생략하겠습니다. 해상도 같은 것은 원하는 값으로 바꿉시다. 중요한 것은 ":1"인데 설명 안 해도 눈치채셨겠지만 디스플레이 번호입니다. 바로 위에서 디스플레이 번호에 5900을 더한 값이 해당 디스플레이 번호에서 사용하는 포트 번호라고 설명했습니다. 위 예에서는 1번을 사용했으므로 5901번 포트를 사용하게 됩니다. 아까 SSH 터널을 뚫을 때 원격 컴퓨터의 5901번 포트를 뚫은 이유가 이겁니다. 명령어가 실행되고 나면 원격 호스트의 1번 디스플레이가 만들어집니다.


3. 가상 데스크탑 접속하기
  저번과 다를 게 없습니다. 클라이언트에서 VNC 뷰어를 실행한 주소에 "localhost:10"이라고 적고 접속합니다. ":10"인 이유는 아까 SSH 터널을 뚫을 때 로컬의 5910번 포트를 뚫었기 때문입니다. 제대로 설정이 됐다면 원격 데스크탑이 열릴 겁니다.

  만약 설정에 문제가 없는 거 같은데 열리지 않는다면 방화벽을 확인합시다. 공유기 같은 걸 사용하고 있고 외부에서 공유기 내부에 있는 호스트에 접속하려는 거라면 포트 포워딩도 꼭 확인합시다. 하긴, 이 글을 보고 있고 이미 SSH 접속도 성공했다면 이런 설명을 할 필요도 없겠군요.

  그리고 주의할 점이 가상 데스크탑에서 배경화면을 사용하면 화면 갱신 속도가 느리기 때문에 되도록이면 배경을 사용하지 않는 것이 좋습니다.


4. 접속해제
  저번과 비슷합니다만 중간에 가상 데스크탑을 닫는 과정이 추가됩니다. 먼저 VNC 뷰어를 종료하고 아래의 명령어로 가상 데스크탑을 닫은 후 SSH에서 exitlogout 명령어로 SSH 세션을 종료하면 됩니다.
vncserver -kill :1
  한 가지 중요한 점은 VNC 뷰어와 SSH 접속만 종료하고 가상 데스크탑은 그대로 남겨둘 경우 다음에 VNC 뷰어로 다시 로그인할 때 이전에 접속을 종료하기 전의 상태가 그대로 나온다는 겁니다. 윈도우의 '원격 데스크탑 연결'과 동일하게 작동한다는 뜻이죠. 당연하지만 이렇게 다시 접속할 때는 가상 데스크탑을 또 실행할 필요가 없습니다.

2010/10/19 00:02 2010/10/19 00:02