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

Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Configuring VNC Server Access on a Redhat Linux

  VNC는 소개한 적이 여러 번 있으므로 레드햇 계열의 배포판에 설치하는 것을 중점으로 핵심 내용만 나열하겠습니다.

1. VNC 서버 설치
# yum install tigervnc-server

2. VNC 세션 설정
  각 계정마다 개별적인 세션을 부여하고 싶다면 VNC 설정 파일인 /etc/sysconfig/vncservers 파일을 수정합니다. 아래는 "lubos"라는 계정을 위해 추가하는 내용입니다.
VNCSERVERS="2:lubos"
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"
  위의 내용을 추가하면 VNC session 2가 지정된 해상도로 lubos라는 계정에 할당됩니다. -nolisten과 -localhost는 보안을 위해 추가한 것으로 VNC에 직접 접속할 계획이라면 두 옵션을 뺀 후 방화벽에서 VNC 포트를 열어야 합니다. 이 글에서는 보안을 위해 SSH 터널을 사용하는 쪽으로 설명하겠습니다.

  VNC 서비스를 시작하기 전에 /etc/sysconfig/vncservers에 설정한 각 계정의 세션을 위한 VNC 패스워드를 생성해야 합니다. 해당 계정으로 변경 후 vncpasswd 명령어를 사용합니다.
[root@localhost ~]# su lubos
[lubos@localhost root]$ vncpasswd
Password:
Verify:
  이제 VNC 서비스를 시작합니다.
# service vncserver start

3. VNC 서버에 직접 접속
  SSH 터널을 사용하지 않고 직접 접속할 수 있게 설정했다면 접속을 위해 먼저 방화벽을 적절히 설정해야 합니다. 그 후 아래와 같은 방법으로 쉽게 접속할 수 있습니다.
$ vncviewer 서버주소:2
Connected to RFB server, using protocol version 3.8
Performing standard VNC authentication
Password:
Authentication successful
  서버주소 뒤에 있는 2는 아까 계정에 할당한 세션 번호입니다. 패스워드를 입력하면 세션이 시작됩니다.

4. SSH 터널을 통해 VNC 서버에 접속
  vncviewer의 -via 옵션을 사용하면 자동으로 ssh 터널을 만들어주기 때문에 쉽게 접속할 수 있습니다.
$ vncviewer -via lubos@서버주소 localhost:2
2013/07/14 00:13 2013/07/14 00:13
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
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : http://kpweb.homelinux.org/blog/index.php?id=13
관련 글 : 가상 데스크탑을 이용한 원격 접속

  이번 포스팅에서는 데비안 계열의 리눅스(데비안, 민트, 우분투)에서 VNC와 SSH를 이용한 원격 접속을 설정하는 내용을 담고 있습니다. 정확히는 SSH 터널을 만든 뒤 그 터널을 이용해 VNC 연결을 만들어 VNC의 트래픽을 암호화하는 방법을 담고 있습니다.



1. 패스워드
  가장 우선적이고 중요한 사항은 원격에서 로그인이 가능한 모든 계정들의 암호는 추측하기 어려운 것이어야 한다는 겁니다. 8자 이상에 숫자, 대소문자를 섞는 것이 좋겠습니다.


2. SSH 포트 번호
  기본적으로 SSH의 포트는 22번이지만 다른 포트 번호를 사용할 경우 외부에서 SSH 서버를 운용하고 있는 것을 파악하기 힘들어지므로 보안상 더 좋습니다. 이 때 Well-Known 포트 번호를 피해 1024 이상의 번호를 사용하는 것이 좋겠습니다.

  만약 공유기를 사용하고 있다면 서버가 될 컴퓨터의 사설 IP를 고정으로 할당합니다. 그리고 포트 포워딩 기능을 통해 아까 정한 포트를 해당 사설 IP와 연결시킵니다. 아니면 공유기에서 사용할 SSH 포트 번호만 아까 선택한 번호로 지정하고 실제 서버 머신에서는 그냥 22번을 사용하도록 설정한 후 둘을 연결하는 것도 좋은 방법입니다. 방화벽을 사용하고 있을 경우 외부에서 해당 포트에 접근할 수 있도록 설정하는 것도 잊지 않도록 합니다.


3. root 계정으로 변경
  이후 작업에는 root 사용자의 권한이 필요합니다. 물론 직접 root 사용자로 로그인하지 않아도 sudo 명령어를 통해 필요한 작업을 할 수 있고 보안상으로도 그게 더 좋겠습니다만 root가 되는 방법을 알아둬서 나쁠 것은 없습니다.

  데비안의 경우 처음부터 root로 직접 로그인할 수 있지만 우분투나 민트의 경우 root 계정에 패스워드가 설정되어 있지 않기 때문에 로그인이 불가능합니다. root로 로그인하는 가장 쉬운 방법으로 아래의 2가지 방법이 있습니다.
  1. 'sudo passwd root' 명령어로 root의 패스워드를 설정한 후 정상적인 방법을 통해 로그인.
  2. 'sudo su -' 명령어로 편법적인 유저 변경. 단, /etc/sudoers 파일에 등록된 계정만 가능.


4.  SSH와 VNC 서버 설치
  아래의 명령어를 통해 SSH 서버와 VNC 서버를 설치합니다.
apt-get install openssh-server x11vnc
  기본적으로 SSH는 암호화를 사용하는 원격 접속 프로그램이지만 이 예제에서는 VNC를 이용한 원격 데스크탑 연결에서 데이터를 암호화하기 위해 사용합니다.

  x11vnc는 원격에서 특정 머신의 데스크탑(GUI 환경을 의미)에 접속할 수 있게 해줍니다. 이 때 원격에서 접속한 사용자와 로컬에서 데스크탑을 사용하던 사용자는 동일한 화면을 보게 됩니다. 즉, 하나의 데스크탑을 두 사용자가 동시에 공유해서 사용하게 됩니다.

  만약 별도의 데스크탑으로 로그인하고 싶다면 아래의 두 패키지를 추가로 설치해줍니다. 하나의 머신으로 여러 사용자가 각자 자신의 데스크탑을 사용할 필요가 있을 때(예를 들어 재택근무용 서버) 유용합니다.
apt-get install tightvncserver xfce4
  tightvncserver는 로컬 데스크탑과는 다른 개별적으로 독립된 가상 데스크탑들을 생성해줍니다. 이 가상 데스크탑들은 VNC로만 접근할 수 있습니다.

  xfce4는 동시에 여러 데스크탑을 만들기에 적합한 수준의 가벼운 데스크탑 환경입니다. Xfce보다 가벼는 데스크탑 환경(=윈도우 매니져)으로는 LXDE, Fluxbox 등이 있습니다.

  여러 가상 데스크탑을 띄울 때 하나의 데스크탑 환경만 사용할 수도 있지만 가상 데스크탑마다 다른 데스크탑 환경을 사용할 수도 있습니다. 자세한 내용은 원격에서 접속 가능한 가상 데스크탑에서 다루겠습니다.


5. SSH 서버 설정
  SSH 서버의 디폴트 설정에 따르면 root 계정으로 로그인이 가능하지만 이것은 보안상 권장되지 않습니다. 만약 SSH를 통해 root 계정으로 로그인하지 못하게 하려면 /etc/ssh/sshd_config 파일에서 아래와 같은 부분을 찾아 yes를 no로 바꿉니다.
PermitRootLogin yes    <- yes를 no로 변경
2014년 01월 30일 추가사항:  SSH 서버가 프록시 서버 역할을 할 수 있도록 아래 옵션을 활성화합니다. 예전에는 없어도 됐다는 것 같은데 지금은 필요하다고 합니다. 확인해보니 디폴트도 no더군요.
PermitTunnel yes
2014년 01월 30일 추가사항: 기본적으로 SSH 서버는 포워딩을 위한 연결이 들어왔을 때 포워딩 대상이 자신의 루프백 주소(localhost, 127.0.0.1)인 연결 요청만 받아들입니다. 이유는 보안 때문입니다. 데이터가 서버까지는 암호화돼서 가지만 서버에서 목적지로 보낼 때는 평문으로 가기 때문이죠. 이를 허용하려면 아래의 옵션도 추가해야 합니다. 단, 이 글의 예에서는 필요하지 않습니다.
GatewayPorts yes
  포트를 바꾸는 것도 간단합니다. 같은 파일에서 아래와 같은 부분을 찾아 포트 번호를 원하는 번호로 바꿉니다. 공유기의 경우 이걸 바꾸는 대신 이 컴퓨터의 이 포트 번호와 연결된 공유기의 외부 포트 번호를 바꾸는 것도 좋은 방법입니다.
Port 22    <- 숫자를 원하는 포트 번호로 변경
  변경을 모두 마쳤으면 /etc/init.d/ssh restart 명령어로 SSH 서버를 재가동시켜 변경사항을 적용합니다.


6. root 계정 로그아웃
  이제 root 계정이 필요 없기 때문에 exit 또는 logout 명령어로 root 계정에서 빠져나옵니다.


7. 로컬에서 SSH 테스트
  SSH 서버가 작동하는지 테스트를 해보기 위해 아래의 명령어를 실행해봅니다.
ssh username@localhost
  "username" 부분에는 테스트에 사용할 계정명을 입력합니다. 비밀번호를 물어보면 입력합니다. 로그인에 성공하면 exit 또는 logout 명령어로 빠져나옵니다.
  만약 SSH 서버의 포트 번호를 변경했다면(공유기의 외부 포트 번호만 변경한 경우라면 제외) 아래처럼 -p 옵션을 추가합니다. "port" 부분에는 SSH 서버의 포트 번호를 입력합니다.
ssh -p port username@localhost


8. 랜에서 SSH와 VNC 테스트
  만약 동일한 랜에 다른 리눅스 컴퓨터가 있다면 그 컴퓨터로 가서 아래의 명령어를 실행합니다.
ssh -L 5903:localhost:5900 username@your_server_ip
  username에는 계정명을, your_server_ip에는 접속할 SSH 서버의 주소를 적습니다. -L 옵션은 로컬 호스트의 특정 포트를 암호화된 SSH 채널을 통해 특정 호스트의 포트로 포워딩시키는 옵션입니다. 위의 예에서는 로컬 호스트의 5903 포트를 원격 호스트의 5900 포트와 연결시키고 있습니다. 이런 연결을 'SSH 터널'이라고 부릅니다. 이해할 때 한 가지 주의할 점은 두 포트 번호의 중간에 있는 localhost인데 이것은 원격 호스트(SSH로 접속할 곳. 즉, "your_server_ip")의 입장에서 localhost를 뜻하는 겁니다. 위 명령어를 차례대로 설명하자면 "로컬 호스트의 5903 포트로 오는 트래픽을 암호화해서 'your_server_ip'로 보내고 그곳에서 복호화한 후 localhost(=your_server_ip)의 5900 포트로 다시 넘긴다."라는 의미가 됩니다. (2014.01.30 추가)위의 GatewayPorts 옵션을 yes로 지정해야 localhost가 아닌 다른 곳으로 설정할 수 있습니다.
 
  아래의 명령어로 VNC 서버를 실행합니다.
x11vnc -localhost -display :0
  "-localhost" 옵션을 사용하면 외부에서 가상 데스크탑으로 직접 접속하는 것을 허용하지 않습니다. 즉, 자신으로부터의 접속만 허용하는데 재미있게도 우리는 위에서 SSH 터널링을 통해 두 호스트를 연결했고 이로 인해 클라이언트 측에서 5903 포트에 데이터를 보내면 그게 서버 측으로 넘어가고 서버는 그것을 다시 자기 자신의 5900 포트로 보내기 때문에 "-localhost" 옵션을 사용해도 원격에 있는 클라이언트가 접속할 수 있게 되는 겁니다.

  이제 클라이언트 데스크탑에서 VNC 뷰어 프로그램을 실행한 뒤 'localhost:3'을 접속 주소로 넣고 접속을 시도합니다. VNC에서 접속 주소 뒤에 넣는 숫자는 VNC 디스플레이 번호를 의미하는 값으로서 거기에 5900을 더한 값이 실제 접속 포트 넘버가 됩니다. 그러므로 'localhost:3'이라고 적은 것은 'localhost에 5903번 포트로 접속하라'라는 뜻입니다. 이 포트를 통해 서버의 5900번 포트(VNC 디스플레이 0번)로 접속하는 겁니다. 위에서 클라이언트의 5900번 포트와 서버의 5903번 포트를 SSH 터널로 연결했던 게 바로 이걸 위해서였던 겁니다.

  이제 VNC 트래픽은 SSH 터널을 통해 암호화되어 전송됩니다. 또한 SSH 터널을 사용하고 있다는 사실을 모르는 공격자는 VNC 서버의 "-localhost" 옵션 때문에 VNC 서버에 접속을 시도조차 할 수 없기 때문에 보안상 1석 2조가 되는 셈이죠.

  연결을 종료하고 싶으면 VNC 뷰어 프로그램을 종료한 후 SSH 접속을 하고 있는 터미널에서 exitlogout 명령어로 SSH 세션을 종료하면 됩니다.


9. 원격 접속하기
  이제 본방입니다. 사실 중요한 건 위에서 전부 다해서 그닥 설명할 것도 없습니다. 외부에 있는 클라이언트 컴퓨터에서 SSH 서버에 접속하기 위해 아래처럼 명령어를 실행합니다.
ssh -p port -L 5903:localhost:5900 username@your_server
  "port"에 서버의 포트 번호, "username"에 로그인할 계정명, "your_server"에 서버의 IP나 도메인을 적습니다. 접속을 시도하면 패스워드를 묻기까지 시간이 좀 걸립니다. 로그인에 성공하면 VNC 서버를 작동시키기 위해 아래의 명령어를 실행합니다.
x11vnc -localhost -display :0
  이제 클라이언트의 데스크탑(=GUI)에서 VNC 뷰어 프로그램을 실행한 뒤 'localhost:3'으로 접속합니다. 이제까지 설정이 올바르다면 서버의 데스크탑 화면이 나올 겁니다. 만약 배경화면을 사용하고 있다면 화면의 갱신속도가 매우 느릴 겁니다. 때문에 원격 접속을 사용할 때는 데스크탑의 배경화면을 단색으로 설정하는 것이 좋습니다.

  연결을 종료하고 싶으면 VNC 뷰어 프로그램을 종료한 후 SSH 접속을 하고 있는 터미널에서 exitlogout 명령어로 SSH 세션을 종료하면 됩니다.

2010/10/17 20:23 2010/10/17 20:23