SSH tunneling으로 VNC Server 접속하기

By | 2009/02/07

  제가 관리하는 동아리 서버는 현재 학교 네트워크 안에 있어서 VNC Server 포트인 5900 포트가 막혀있습니다. 네트워크 담당하는 팀에 연락을 하였지만, 보안의 이유로 해당 포트를 열어 줄 수 없다는 답변을 받았습니다.

c31

Server에 바로 접속하면 나타나는 에러 메시지

  따라서 어떻게 하면 VNC Server를 쓸 수 있을까 고민을 하다가 문득 이런 생각이 들었습니다.
‘현재 SSH(Secure Shell)로 접속이 가능하니 이 포트를 통해 접속을 하면 어떨까?’
즉, Secure Shell이 쓰는 22번 포트를 통해 서버와 클라이언트(제 컴퓨터)가 통신을 하지만, 그렇게 주고받은 데이터는 다시 자신의 VNC Server와 Viewer 프로그램에 loop 방식으로 전달할 수 있지 않을까 생각하였습니다.

  하지만 정말로 이런 기술이 있는지, 있다면 그 이름이 무엇인지 몰라서 고민하였습니다. 어떻게 검색을 해서 해당 정보를 얻어야 하는가 싶었는데, ‘vnc server linux ssh’이라는 검색어만으로도 정확한 이름을 알 수 있었습니다. 그 이름은 바로 SSH tunneling이었습니다.^^;;(사실이 아닐 수도 있습니다.)

  서론이 조금 길었네요. 이제부터 접속하는 방법에 대해 설명하겠습니다. 일단 다음 그림과 같은 네트워크에서 Client(Notebook)가 Viewer, Server가 (VNC) Server의 역할을 하고 있습니다.

001

  그림이 매우 투박하네요.^^
설명하자면 Client는 Notebook으로 VNC Viewer를 이용해서 Server에 접속을 하려고 합니다. Client의 IP Address는 123.145.167.189(물론 뻥…;;)입니다. 하지만 여기서는 이것은 그리 크게 중요하지 않습니다. (혹자는 공인 IP가 아니면 문제가 된다고 하나 제 노트북은 공유기가 할당한 사설 IP Address(192.168.0.3과 같은…)을 쓰기에 문제 없습니다.)
그리고 Server는 거기에 VNC Server가 root 권한의 계정이 1번으로 돌아가고 있습니다. 이에 대한 자세한 얘기는 VNC Server Setting에 관한 글을 참조해주세요. 그리고 Server의 URL은 skkulug.skku.ac.kr입니다. (제 동아리 서버 주소입니다.)

  이제 방법을 적겠습니다. Client가 필요한 프로그램은 다음과 같습니다. (Ver은 제가 사용한 프로그램 Version입니다.)

1. Putty를 실행시킵니다.

c12

2. Host Name에는 Server URL 혹은 IP Address, Connection type에는 SSH, Saved Sessions에는 원하는 이름을 적은 후 Save를 클릭하세요. 그럼 프로그램을 다시 실행할 때 해당 Sessions를 Load하면 셋팅했던 것을 다시 쓸 수 있습니다.

c22

3. Category에서 Connection-SSH을 클릭하여 Protocol options의 Enable compression에 Check하고, Preferred SSH protocol version에 2를 설정합니다. 이것은 Server가 어떤 SSH를 쓰느냐에 따라 달라질 듯싶습니다만, 대체로 이렇게 하면 문제 없이 동작할 것입니다.

c23

4. Connection-SSH-X11에 X11 forwarding의 Enable X11 forwarding에 Check합니다.

 c24

5. Connection-SSH-Tunnels에서 마지막으로 setting합니다. ‘Add new forwarded port’의 Source port에 VNC Server가 쓰는 Port address를, Destination에는 Server URL or IP:Port address를 적습니다.
여기서는 VNC Server에 root가 1이므로 5900 + 1하여 5901이 되기에 Port address를 5901로 적었습니다. 그리고 Destination은 skkulug.skku.ac.kr:5901로 하였습니다.
이렇게 설정을 마친 후 Add 버튼을 누르면 위의 리스트에 추가가 된 것을 확인할 수 있습니다.

6. 마지막으로 Category에 Session을 클릭하여 처음 화면으로 돌아갑니다. 그리고 Save를 클릭하여 지금까지 설정한 것을 저장합니다.
그리고 Open을 클릭하여 해당 서버에 SSH 접속을 합니다.

 c25

7. 접속 후 login을 합니다. 이 때 굳이 root가 아닌 일반 사용자로 login 하여도 문제 없습니다.

c26

8. VNC Viewer를 실행시킵니다. Server 부분에 ‘localhost:1’이라 하고 OK 버튼을 누릅니다.
localhost는 실행하는 컴퓨터 자신을 얘기하고 뒤에 숫자는 VNC Server display number를 뜻합니다. 여기서는 root로 1이 설정되어 있었기에 1을 적었습니다.

c27

9. 그럼 이처럼 제대로 접속이 되어 Authentication 창이 나옵니다.

c29

10. 암호를 제대로 넣었다면 이처럼 VNC Server에 제대로 접속합니다.

  이에 관한 글은 매우 많습니다. 그리고 제가 적은 이 글은 다른 글을 그대로 보고 옮겨 적은 것이라 하여도 과언이 아니었습니다. 하지만 이렇게 글을 또 적는 이유는 있습니다.
바로 제가 본 여러 문서들은 하나도 맞지 않았기 때문입니다. 즉, 전부 실패를 하였다는 것이지요. 계속된 실패를 거듭하다가 마지막에 제대로 동작하는 문서를 찾았습니다.
거기에 더 큰 문제는 제가 착각을 하여 제대로 실행을 못 시킨 것도 있습니다. 대표적으로 어떤 예제는 display number가 22번으로 하였습니다. 그래서 마지막에 VNC Viewer를 사용할 때 :22라고 하더군요. 저는 그것이 display number가 아니라 22번 port를 사용한다고 얘기하는 것이라 착각하여 1을 써야함에도 22를 썼던 것입니다. 당연히 접속은 되지 않았고, 그 때문에 좌절하였습니다.
이러한 이유로 인터넷 상에서는 조금 지겨운 이 문서를 만들었습니다.^^

참조

2 thoughts on “SSH tunneling으로 VNC Server 접속하기

  1. cortex

    안녕하세요 영준입니다.
    보안상 스쿠루지 서버 주소는 모자이크를 하는게 좋을듯 하네요…..

    Reply
    1. NoSyu

      오오.. 역시 해당 블로그는 뎅궁씨 것이었군요.^^;;;
      리퍼러에 잡힌 것을 보았지만 누구 것인가 몰랐습니다.OTL….
      그럴까도 생각했지만, 딱히 해야할 이유도 없을 듯싶어 그냥 두기로 하였습니다. 나름 광고도 될 듯싶고…ㅎㅎ;;

      Reply

Leave a Reply