티스토리 뷰

리눅스

VNC 서버 이용하기

꿈이 있는 자유 2010. 7. 16. 22:42
이전 글에서 원격로그인하는 2가지 방법을 살펴 봤다. Telnet 과 SSH 가 그것이다. Telnet 은 원격 로그인의 원조격이지만 보안문제상 SSH로 암호화해서 서버와 클라이언트간에 데이타를 전송해야 한다고 설명했다. 그런데, SSH 나 Telnet 은 모두 CUI 방식 즉 문자 명령방식이기 때문에 마우스를 이용해서 명령처리를 해야 하는 경우 사용할 수 없다. 또한 그래픽 환경에서 처리해야 하는 명령들도 사용할 수 없다. 오로지 명령어들을 캐릭터방식으로만 처리할 수 있는 것이다. 여기 그래픽환경에서 원격로그인하는 방법을 공부해보자.

Telnet 과 SSH 와 달리 VNC 는 X-Window 를 지원하기 때문에 마우스 같은 그래픽 명령들을 처리할 수 있다. 과거 오랫동안 리눅스 같은 커맨드방식이 편한 분들은 이해가 안되겠지만, 지금은 그래픽시대 아닌가? 그래픽 환경에서 원격로그인이 가능하게 해 주는 것이 바로 VNC(Vertual Network Computing) 이다.

VNC 를 사전에서 찾아보자. DAUM 백과사전의 IT백과사전에서는 이렇게 정의했다.

인터넷상의 어디에서든 광범위한 컴퓨터로부터도 컴퓨팅 데스크톱 환경을 보이도록 하는 것. 가상 네트워크 컴퓨팅(VNC) 의 클라이언트와 서버는 리눅스, 윈도즈, 맥 컴퓨터 등 여러 가지가 가능하며, 윈도즈 NT나 95상에서 엠에스워드(MS-Word)를 실행해, 그 출력을 리눅스로 표시할 수 있고, 그 반대로도 할 수 있다. 리눅스로 응용 프로그램을 실행하고, 그 출력을 다른 리눅스와 윈도즈로 표시할 수 있다. 자바의 클라이언트도 웹 브라우저 내부에서 원격 디스플레이를 실행할 수 있다.

출처 : http://enc.daum.net/dic100/contents.do?query1=15XXX23653

Wikipedia 에서는 이렇게 정의했다.

In computing, Virtual Network Computing (VNC) is a graphical desktop sharing system that uses the RFB protocol to remotely control another computer. It transmits the keyboard and mouse events from one computer to another, relaying the graphical screen updates back in the other direction, over a network.

VNC is platform-independent – a VNC viewer on one operating system may connect to a VNC server on the same or any other operating system. There are clients and servers for many GUI-based operating systems and for Java. Multiple clients may connect to a VNC server at the same time. Popular uses for this technology include remote technical support and accessing files on one's work computer from one's home computer, or vice versa.

VNC was originally developed at the Olivetti Research Laboratory in Cambridge, United Kingdom. The original VNC source code and many modern derivatives are open source under the GNU General Public License.

There are a number of variants of VNC which offer their own particular functionality; e.g., some optimised for Microsoft Windows, or offering file transfer (not part of VNC proper), etc. Many are compatible (without their added features) with VNC proper in the sense that a viewer of one flavour can connect with a server of another; others are based on VNC code but not compatible with standard VNC.

출처 : http://en.wikipedia.org/wiki/VNC

보다 자세한 내용은 해당 사이트를 방문하기 바란다. Telnet 은 오랫동안 사용해 왔기 때문에 대부분의 OS에서 지원된다. 기본 프로그램으로 이미 설치돼있거나, 설치하는데 별도의 작업을 필요로 하지 않지만, VNC는 별도로 서버 프로그램을 설치하거나 클라이언트 프로그램을 설치해야 한다. 단점은 속도다. 당연히 글자명령방식 즉 커맨드 CUI 환경의 명령보다도 GUI 즉 그래픽 명령을 전달하고 그래픽으로 처리되는 것도 전송해야 하기 때문에 속도가 현저히 떨어진다는 단점이 있다.

이번 글에서도 앞의 글과 동일하게 리눅스에 VNC 서버 프로그램을 설치하고 리눅스에서 클라이언트 툴로 접근하는 것을 해보고, Windows7 에서도 VNC 클라이언트 툴로 접근해보기로 하겠다.

먼저 설치 과정을 보자.

1. 리눅스에 VNC 서버 설치하기
2. VNC 서버 환경 설정 및 서비스 가동하기
3. Firewall 에 포트 추가하기
4. 리눅스에 VNC 클라이언트 툴 설치해서 연결하기
5. Windows7 에 VNC 클라이언트 툴 설치해서 연결하기

1. 리눅스에 VNC 서버 설치하기

먼저 VNC 서버 역할을 할 리눅스에 VNC 서버 프로그램을 설치하자. 현재 리눅스에 관련 패키지가 설치돼있는지 조사해보자.


역시 예상대로 패키지가 설치돼있지 않다. 다음 명령으로 설치하자.

yum -y install vnc-server

당연히 root 권한으로 설치해야 한다.
 

설치를 시작했다.


잠시 기다리면 설치가 끝난다.


근데, 자세히 살펴보니 설치된 VNC Server 가 Fedora에서는 기본적으로 TigerVNC 서버다. 이제 설치했으니 서비스를 올려보자.

service vncserver start

어라! 서비스가 되지 않는다.


서비스가 시작에 실패할 뿐 아니라 현재 서비스 상태도 정지돼있는 것을 알 수 있다. 그 이유는 VNC 서버는 서비스를 스타트하기전에 환경 설정을 해야하기 때문이다.


2. VNC 서버 환경 설정 및 서비스 가동하기

VNC 서비스를 가동하기 위해 먼저 환경설정을 하자. 여기서 해야할 환경설정은 VNC 서비스로 원격로그인할 계정을 미리 지정하고 그 계정이 로그인할 때 사용할 패스워드를 설정하는 작업이다. 꼭 유념해야 할 사항은 이 계정의 패스워드는 원래 서버에 저장돼있는 패스워드가 아니라 VNC 서비스로 원격로그인할 패스워드를 따로 만들어줘야 한다는 것이다. 여기서는 2개의 계정을 지정하도록 하겠다. 하나는 root 이고, 하나는 일반사용자 계정이다.

VNC 서비스로 로그인할 계정을 지정하기 위해 /etc/sysconfig/vncservers 파일을 vi 에디터를 이용해서 편집하자. 물론 편집은 root 계정으로 해야 한다.

vi /etc/sysconfig/vncservers


문서 맨 아래에 계정 지정을 아래와 같이 사용한다. 단, 멀티 계정을 지정할 때는 각 계정별로 띄어쓰기로 구별한다. 계정앞 숫자는 디스플레이번호이다. 즉 일종의 VNC 포트 번호 같은 역할이라고 보면 된다.

VNCSERVERS="1:root 2:Instructor"


문서를 저장하고 빠져 나온다. 그리고 나서 각각의 계정의 홈 디렉토리로 이동해서 각 계정이 원격로그인할 패스워드를 생성한다. 다시 말하지만, 이 패스워드는 VNC 서비스로 원격로그인할 패스워드다. 먼저 root 의 홈 디렉토리로 이동해서 생성하자.


root 의 홈디렉토리로 이동한 다음, 패스워드를 아래의 명령으로 생성한다.

vncpasswd

그러면, 패스워드를 물어볼 것이다. 필자는 간단하게 123456을 넣었다. 당근 실무에서는 큰일날 짓이다. 연습이다. 패스워드 확인에 동일하게 패스워드를 넣고 엔터키를 누르면 된다. 그리고 나면 숨김속성을 가진 .vnc 라는 디렉토리가 생성된다. 그리고 그 속에 passwd 라는 root 계정의 vnc 패스워드를 저장한 파일이 생성된다.

이번엔, 사용자 계정으로 바꾼 다음, 이 계정에 대한 패스워드를 지정하도록 하자.


역시 Instructor 계정도 root 계정과 동일하게 자기의 홈 디렉토리로 이동한 다음 vncpasswd 명령으로 이 계정이 원격로그인하기 위한 패스워드를 생성했다. 필자는 동일하게 패스워드를 123456으로 했다. 다시 한번 주지하지만, 실무에서는 절대로 이런 패스워드를 생성해서는 안된다. 클난다. 이제 각 계정의 패스워드를 지정했으니까 서비스를 실행시키기 위해 다시 root 계정으로 바꾼다음 서비스를 올려보자.


VNC 서비스로 원격로그인할 계정이 2명이기 때문에 위의 그림에 보면 root 와 Instructor 계정에 대해 서비스에 각각 별도로 등록한 것을 볼 수 있다. 그리고 서비스가 성공적으로 시작됐다.


3. Firewall 에 포트 추가하기

다른 머쉰에서 VNC 서비스로 원격로그인할 수 있도록 방화벽에 포트 추가하자. 먼저, root 의 권한으로 방화벽으로 들어간다.

system-config-firewall


당연히 VNC 서비스를 위한 포트가 등록돼있지 않으니까 [Other Ports] 를 클릭하자.


이미 Telnet 서비스에 대해 글을 올리기 위해 방화벽에 23번을 추가했었는데, 지금은 새 포트 추가를 위해 [Add] 버튼을 클릭하자. 포트번호 5900 번은 VNC 서비스를 위해 이미 지정된 번호이다.


추가하기 위해 [OK] 버튼을 누르자. 그리고 가끔 경우에 따라서 VNC 서비스가 5901 번도 사용하므로 이 번호도 추가한다. 5901 번은 목록에 없기 때문에 [User Defined] 체크 박스를 클릭하고 [Port / Port Range] 에 5901 을 넣고, [Protocol]에는 TCP 를 선택한다.


그리고 나면 추가된 포트가 5900 번과 5901 번 이렇게 2개가 된다.


이제
 버튼을 클릭하여 방화벽에 포트 등록 하자. [Yes] 를 클릭해서 적용하고 창을 닫는다.




4. 리눅스에 VNC 클라이언트 툴 설치해서 연결하기

리눅스 서버에 VNC 서버 패키지를 설치하고 성공적으로 서비스도 가동했고 방화벽에 등록도 했다. 리눅스에서 VNC 클라이언트 툴로 접근해 보자. 우선 리눅스에 VNC 클라이언트 툴을 설치하자. 클라이언트 툴도 tigervnc 다.

su -c 'yum -y install tigervnc'


잠시 기다리면 VNC 클라이언트 툴인 tigervnc 가 설치된다.


자 이제, 리눅스용 VNC 클라이언트 툴 설치도 끝났고, 연결하는 것만 남았다. 연결해 보자. 연결할 때 vncviewer 명령을 사용하고 연결할 리눅스 서버 IP 를 넣고 그 뒤에 /etc/sysconfig/vncservers 파일에 설정했던 root 의 디스플레이넘버를 넣는다.

vncviewer 192.168.179.133:1

잠시후, 이렇게 화면이 나타나서 root 의 패스워드를 묻는다.


이게 어떻게 root 인걸 아느냐고? 연결할 때 1번을 넣지 않았는가? /etc/sysconfig/vncservers 파일에 분명 1번은 root 라고 정의했기 때문에 vncviewer Username 을 아예 묻지 않는다. root 의 패스워드인 123456 을 넣고 엔터키를 누르자.


이 화면이 이해가 되는가? 리눅스 속에 또 다른 리눅스 화면이 나타났다. 물론 화면속의 리눅스는 root 계정의 화면이다. 바탕화면에 root 계정의 홈 디렉토리 그림이 보이고, 현재 root 로 로그인했으니까 조심하라는 경고창이 나타난다. [Close] 버튼을 눌러 경고창을 닫고 하나씩 해보라...좀 속도가 느려서 그렇지 똑같다.


이번엔, 다른 사용자로 로그인해보자. 다른 사용자인 Instructor 로 로그인하자.


디스플레이 번호 2번은 Instructor 다. 역시 패스워드 123456 을 넣고 엔터키를 누르자.


로그인 성공이다. 뒤의 화면은 진짜 리눅스 화면이고 앞의 화면은 방금 VNC 서비스로 연결한 화면이다. 두개의 화면을 비교해 보라. 똑같다. VNC 서비스는 원격에서 그래픽하게 로그인하게 해주는 거 맞다...


5. Windows7 에 VNC 클라이언트 툴 설치해서 연결하기

이제 마지막으로 Windows7 에서 VNC 클라이언트 툴을 설치하고 VNC 서비스로 리눅스에 원격로그인해보자. 먼저 Windows7 용 VNC 클라이언트 툴을 찾아보자. 그랬더니 마침 TightVNC 가 있더군요.



이 프로그램을 선택한 이유는 최신 버전인 2.0.2 버전이 Microsoft Windows Vista 와 Windows7 에서 가능하기 때문이다. 왼쪽 프레임의 [2.0.2 Released!] 링크를 클릭하자.


Windows 용 세개 중에 첫번째 링크를 클릭한다. 두번째 것을 다운받아도 되는데, 이건 압축된 파일이기 때문에 다운로드받고 설치하기 위해 압축을 풀어야 하니까 아예 exe 파일을 다운받는 거다.


파일 사이즈가 크지 않으니까 바로 실행하자. [Run] 버튼을 클릭한다.


[Next] 버튼을 클릭한다.



[I Agree] 를 클릭하여 설치를 진행하자.


Windows7 에서는 VNC 서버 프로그램을 설치하는 것이 아니고, 클라이언트 프로그램만 설치할 거니까 [TightVNC Server] 체크박스를 해제한다. [Next] 를 클릭한다.


[Next] 를 클릭하여 설치를 계속 진행한다.


별로 중요한 부분이 아니다. [Next] 를 클릭한다.


설치가 끝났다. [Next] 버튼을 클릭하자.


[Finish] 버튼을 클릭하여 설치를 마무리하자. 시작버튼에서 [TightVNC] --> [TightVNC Viewer] 로 들어가서 프로그램을 띄우자.


TightVNC 는 아래와 같이 생겼다.


[TightVNC Server] 에 리눅스 서버 즉 VNC 서버 IP와 디스플레이번호를 입력한다. 입력방식은 위의 리눅스 클라이언트 툴과 동일하다. VNC 서버 IP:디스플레이번호

192.168.179.133:1


1번은 root 다. 역시 User Name 은 비어있다. 이미 디스플레이번호가 1번은 root 라는 것이 저장되있기 때문이다. 패스워드 123456 을 넣고 [OK] 버튼 또는 엔터키를 누른다.


어떤가? Windows7 에서 리눅스 서버로 원격로그인했다. 역시 동일하게 로컬에 앉아서 명령을 내리는 것처럼 똑같이 작업을 수행할 수 있다. 단점은 이미 위에서 언급했듯이 속도문제가 있다. 또 있다. 현재 Windows7 에서 원격로그인할 때 계정은 root 만 된다. 어찌 된 일인지 일반 계정은 연결 실패한다.


이번엔 디스플레이번호 2번 즉, 일반 사용자 계정으로 연결해 봤다.


그런데, 실패한다. 현재 Windows7 에서는 오로지 root 만 가능한 것 같다. 이것 역시 커다란 보안의 문제가 된다. 그래서 결론, 웬만한 작업 수행은 PuTTY SSH 방식으로 하라. 그리고 마우스 작업이 필요할 경우에만 PuTTY 에서 VNC 서비스 가동시키고 TightVNC 클라이언트로 얼른 작업 수행하고, 작업이 끝나면 바로 창 닫고 다시 PuTTY 툴로 나머지 작업을 진행하라...


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함