[VNC, SSH °ÁÂ] ssh¸¦ ÀÌ¿ëÇØ vnc º¸¾ÈÁ¢¼Ó Çϱâ
VNC의 약점이라고 하면 외부로 포트 개방시 8자리 비밀번호가 brutal force 공격에 털리기 쉽다는 점입니다.
하지만 VNC 환경 자체를 구축하는 일이 어렵지 않고 특히 리눅스 서버 환경의 경우 xrdp보다 설정 방법이 아주 쉽기 때문에
원격 데스크톱 환경에 VNC를 사용 하는 분이 많은 걸로 알고 있습니다.
VNC의 보안 약점을 보완하는 방법으로 ssh 포트포워딩을 사용할 수 있습니다. 서버에서 vncserver를 실행할 때 -localhost 옵션을 주게 되면
서버 자기 자신만 VNC 포트에 접근 가능하게 세팅됩니다. 외부에서 포트가 완전 차단되어 보안 걱정이 없어집니다. SSH 포트포워딩은 서버의 VNC포트를 SSH 클라이언트 PC로 포워딩해줍니다. 클라이언트 PC의 로컬 포트가 서버 PC의 로컬 포트로 바로 연결되어 SSH 터널링이라고도 부릅니다.
SSH 포트포워딩과 VNC를 조합하면 SSH의 보안 성능과 VNC의 편리함 두 마리 토끼를 다 잡을 수 있겠죠?
지금부터 세팅 방법을 알려드립니다.
1. 서버측
VNC 서버 구축시 -localhost 옵션을 설정해 자기 자신만 접속이 가능하도록 해줍니다.
예를 들어
vncserver -localhost -geometry 1280x800 :1
이런 식으로 vncserver를 열어주면 localhost:5901에 VNC 서버가 열리게 됩니다. :1은 디스플레이 번호(VNC 번호) 입니다. 튜토리얼을 위해 통일하겠습니다.
netstat -an |grep LISTEN |grep 5901 명령어로 해당 포트가 127.0.0.1(localhost)에만 열려 있는지 확인합니다.
윈도우 서버의 경우 포트확인을 할 줄 모르시면 다른 PC에서 직접 접속시도해보고 접속에 실패하는지=잘 막혀있는지를 확인합니다.
또 중요한 점은 서버에 SSH server가 돌아가고 있어야 합니다.
2. 클라이언트
SSH 클라이언트와 VNC viewer를 준비합니다.
- SSH 개인 공개키 만들기:
ssh의 경우 공개키를 만들어 서버의 authorized_keys 파일에 공개키 내용을 넣어주면 ssh 자동 로그인을 할 수 있습니다.
클라이언트 pc에서 ssh-keygen -t rsa 명령어를 쓰면 경로와 pass phrase를 지정하라고 하는데, 경로는 기본, pass phrase는 빈값으로 엔터만 두 번 쳐 주시면 지정 경로에 id_rsa.pub 파일이 생깁니다.
파일 내용을 서버의 VNC 서버 유저의 SSH 컨픽 디렉토리의 authorized_keys(예를 들면 /home/vncserver/.ssh/authorized_key)의 뒷부분에 붙여 넣습니다.
여기까지 했으면 ssh vncserver@serverip -p 로 패스워드 없이 로그인이 되는지 확인해 봅니다.
- 포트 포워딩 하기, (5901 포트의 경우):
ssh -x -fNT -L 5901:127.0.0.1:5901 <서버userid@서버ip> -p <서버의 ssh포트>
위 명령어로 클라이언트 PC와 서버 컴퓨터 간 포트포워딩이 실행됩니다. 옵션에 -x는 X11 포워딩을 사용하지 않도록 하고, -fNT는 백그라운드 실행(포트포워딩 문에 ssh 창을 띄워 놓을 필요는 없으니까요). -L 포트:127.0.0.1:포트 는 클라이언트 pc에 해당 포트를 로컬로 여는 것, 이하는 서버 접속을 위한 세팅입니다.
위 명령어가 제대로 작동하는지 확인하려면 -fNT 옵션을 제외하고 실행해보세요. 서버에 접속해 tty 스크린이 띄워지면 성공한 것입니다.
- VNC 접속하기
이제 VNC 접속만 남았습니다. Real VNC 같은 뷰어 프로그램으로 localhost:1에 접속하면 됩니다.
포트포워딩-VNC 접속 스크립트
https://github.com/ncianeo/vnc-ssh
vnc 서버와 ssh 공개키 작업만 해 놓으면 위 스크립트를 받아 포트포워딩-VNC 접속을 한 번에 할 수 있습니다.
vnc-ssh.sh 파일을 편집해 클라이언트 내 VNC 뷰어 경로, VNC 서버 주소와, 디스플레이 번호, ssh가 열려있는 포트 번호를 입력해 주시면 세팅 완료입니다.