본문 바로가기
업무이야기/Linux

리눅스 컴퓨터에서 윈도우즈 컴퓨터로 원격 데스크탑 연결하는 방법 (rdesktop 사용법)

by 쫑콩아빠 2011. 11. 1.
반응형

리눅스 컴퓨터에서 윈도우즈 컴퓨터로 원격 데스크탑 연결하는 방법 (rdesktop 사용법)

 

리눅스에서 윈도우즈로 원격접속하기.

제가 예전에 우분투에서 윈도우즈로 접속하려고 여기저기 뒤져보며 이것도 해보고 저것도 해보고 노가다를 해본 경험을 바탕으로 우분투포럼에 how to remotely connect to windows from linux using rdesktop라는 글을 올렸지요. 한글버전도 있어야겠다 싶어서 여기에 올립니다. 이 글은 구글검색을 통해 이글을 찾게 될 리눅스초보자들까지 대상으로 쓴 글이기 때문에 초보자가 아닌 분들에게는 마치 Emacs에 내장된 eLisp설명서를 읽는 것같은 느낌일 겁니다.

윈도우즈는 XP부터 "원격 데스크탑 연결"이라는 기능을 제공합니다. 원격 데스크톱 연결이 무엇이냐? 홍길동이라는 애가 자기 집에 있는 컴퓨터 앞에 앉아서 회사 사무실에 있는 자기 컴퓨터로 접속을 해서 홍길동 앞에 있는 모니터에 사무실 컴퓨터의 스크린이 짠 하고 나오면서 마치 회사 컴퓨터 앞에 있는 것처럼 작업을 할 수 있게 해주는 것이 바로 '원격 데스크탑 연결'입니다. 이해가 안되시는 분들은 원격 데스크톱 연결 질문 대답을 읽어보세요. 이게 가능하려면 홍길동의 회사컴퓨터에 윈도우즈 XP Professional이상이 설치되어있고 또 원격 데스크탑 연결 서비스가 켜져있고 홍길동의 집컴퓨터에는 원격 데스크탑 연결 클라이언트가 설치되어있어야 합니다.

rdesktop은 리눅스에 설치해서 쓸 수 있는 윈도우즈 원격 데스크탑 연결 클라이언트입니다. rdesktop을 이용하면 리눅스 컴퓨터에서 윈도우즈 컴퓨터로 접속할 수 있습니다 즉 윈도우즈 컴퓨터의 스크린이 리눅스 컴퓨터 스크린에 나타납니다.

remote desktop software를 읽어보시면 아시겠지만 이런 종류의 원격접속프로그램은 rdesktop외에도 VNC, FreeNX 등 여러가지가 있습니다.

rdesktop사용법을 알아보기전에 먼저 비슷한 프로그램들과 rdesktop의 차이를 비교정리하겠습니다. 잠깐 그전에

님이 진짜로 원하는 것은 원격접속프로그램이 아니라 다른 것일 수도 있다

리눅스와 윈도우즈를 함께 쓰는 방법은 원격접속 말고도 아래와 같이 여러가지 방법이 있습니다.

한 컴퓨터에 윈도우즈와 리눅스를 같이 깔아서 부팅할 때마다 원하는 운영체제를 선택하고싶다 --> 듀얼 부팅
리눅스에서 윈도우즈 프로그램을 깔아서 사용하고 싶다 --> 와인
윈도우즈에서 리눅스 프로그램이나 유닉스 프로그램을 깔아 사용하고 싶다 --> 윈도우 환경에서 이용할 수 있는 유닉스 플랫폼 목록
리눅스에다가 윈도우즈 전체를 깔아서 쓰고 싶다. (혹은 거꾸로) --> VirtualBox, VMWare
누가 나한테 물려준 컴퓨터에 리눅스가 깔려있더라 난 리눅스 같은 거 필요없다 쓰기 쉬운 운영체제로 바꾸는 방법을 알려달라 --> 예쁘고 쓰기 쉬운 운영체제
윈도우즈와 리눅스 대응 프로그램 리스트 --> windows and os x software alternatives, Linux Alternative Project

(원격 데스크톱 접속 프로그램들 비교)

VNC는 거의 모든 OS에서 설치가 가능하고 거의 모든 OS로 접속가능합니다. 그런데 윈도우즈 원격 데스크탑이나 rdesktop이나 NX에 비해서는 반응속도가 느립니다. rdesktop은 윈도우즈로만 접속이 가능합니다. NX는 윈도우즈와 리눅스에 설치가능하고 리눅스로만 접속이 가능합니다. NX와 rdesktop과 윈도우즈 데스크탑 연결은 속도가 빠르고 기본적으로 연결을 암호화합니다. 하지만 VNC는 기본적으로는 연결이 암호화되어있지 않습니다만 ssh를 이용하면 VNC연결을 암호화할 수 있습니다. 더 자세한 사항은 comparison of remote desktop software를 읽어보세요. (링크는 되도록 한글로 된 거로 걸고 싶으나 걸만한 링크가 없다는... )

전 VNC보다는 rdesktop을 추천합니다. 속도도 빠르고 세팅하기도 쉬우니까.
그래도 VNC를 쓰시겠다는 분은 VNC 사용법VNC Ubuntu Documentation을 읽어보세요.

원격 접속 프로그램들마다 쓰는 프로토콜이 다릅니다. VNC, UltraVNC, RealVNC라는 이름의 프로그램들은 VNC프로토콜을 사용하고 rdesktop과 윈도우즈 원격 데스크탑은 RDP라는 프로토콜을 사용하고, FreeNX와 No Machine NX는 NX프로토콜을 사용합니다. 컴퓨터A에서 컴퓨터B로 원격접속하려면 컴퓨터B에 원격접속서버가 돌아가고있어야하고 컴퓨터A에는 같은 프로토콜을 사용하는 원격접속클라이언트가 설치되어있어야합니다. 예를 들면 No Machine NX와 FreeNX가 서로 다른 사람들이 만든 프로그램이지만 사용하는 프로토콜은 같기 때문에 컴퓨터B에 No Machine NX 서버를 깔아서 돌리고 컴퓨터 A에 FreeNX 클라이언트를 깔면 컴퓨터 A 앞에 앉아서 컴퓨터 B로 접속할 수 있습니다. 프로토콜이 도대체 뭔지 모르겠다거나 무슨 말인지 이해가 안된다는 분들은 걱정하지마세요 이해 안되도 rdesktop을 이용하는데는 지장이 없어요.

우분투 사용하시는 분들은 프로그램->인터넷을 살펴보세요. 거기에 "원격 데스크탑 보기"(vinagre)와 "터미널 서버 클라이언트"(tsclient)라는 프로그램들이 있는데 이것도 다른 컴퓨터로 원격 접속을 하게 해주는 클라이언트프로그램입니다. rdesktop은 거기에 없죠? 없을 거예요.

"원격 데스크탑 보기"(vinagre)는 VNC프로토콜을 사용합니다. 이 프로그램으로 윈도우즈에 접속하려면 윈도우즈에 VNC프로토콜을 사용하는 원격접속서버를 설치해야합니다. 그런 설치작업을 할 의향이 있으신 분은 한번 써보세요. 암호화하려면 ssh로 뭘 해줘야됩니다 속도가 좀 느릴 거예요.

"터미널 서버 클라이언트"(tsclient)과 rdesktop은 모두 RDP프로토콜을 사용하는 원격접속클라이언트입니다. "터미널 서버 클라이언트"는 아래의 스크린샷에서 보시다시피 사용하기 쉽게 생겼습니다. rdesktop은 아래 두번째 스크린샷처럼 사용합니다. 그렇습니다. rdesktop은 터미널창에서 입력해야합니다. 터미널서버클라이언트는 옵션 설정이 쉬운 반면 rdesktop은 터미널서버클라이언트보다 다양한 기능과 옵션을 제공합니다. (사실 터미널서버클라이언트는 rdesktop을 실행합니다.)

터미널 서버 클라이언트 (tsclinet)

rdesktop

잠깐 용어 설명 : 리눅스가 설치된 컴퓨터A에서 rdesktop이나 터미널서버클라이언트를 이용해서 윈도우즈컴퓨터B로 원격 접속하면 컴퓨터B는 "원격 컴퓨터"라고 부르고 컴퓨터A는 "로컬 컴퓨터"라고 부릅니다. 원격접속하면 원격 컴퓨터의 스크린 화면이 로컬컴퓨터 모니터에 나타나는 겁니다.

터미널서버클라이언트와 rdesktop이 지원하는 기능

1. 원격 컴퓨터 화면크기설정 (원격컴퓨터의 스크린을 보여주는 창의 크기.)
2. 원격 컴퓨터 소리 설정 (원격컴퓨터에서 나는 소리가 로컬컴퓨터에서 나게 해주는 기능. 원격컴퓨터에 깔린 음악프로그램으로 원격컴퓨터에 있는 음악파일을 재생하면 소리가 로컬컴퓨터에서 나면 좋겠죠.)
3. 하드디스크 연결 (원격컴퓨터에서 로컬컴퓨터의 파일을 접근할 수 있게 해주는 기능. 원격컴퓨터의 윈도탐색기에서 로컬컴퓨터의 파일에 접근할 수 있습니다.)
4. 연결시 시작 프로그램 설정 (원격접속을 시작할 때 자동으로 실행될 윈도우즈프로그램들을 설정)
5. 연결 성능에 관련된 설정
.
rdesktop이 지원하는 다른 기능

1. 장치 연결 (원격컴퓨터에서 인쇄하면 로컬컴퓨터의 프린터에서 인쇄되게 하는 등의 장치연결. 스피커, 프린터, 하드디스크 USB등)
2. SeamlessRDP (원격컴퓨터의 프로그램 하나 하나를 로컬컴퓨터에서 보이도록 하는 기능. 즉 원격컴퓨터 데스크탑 전체가 로컬컴퓨터 모니터에서 보이는 게 아니라 특정한 프로그램을 콕 찝어서 그것만 로컬컴퓨터에서 작업하는 기능. 무슨 말인지 이해가 안되면 구글이미지검색창에 SeamlessRDP를 입력해보세요.)
3. 로컬컴퓨터에 있는 특정한 폴더를 원격컴퓨터에 연결하는 기능.
4. 클립보드 공유 (원격컴퓨터에서 텍스트를 클립보드로 복사해서 로컬컴퓨터에서 붙여넣기하고 반대로도 할 수 있는 기능.)

윈도우즈컴퓨터에서 설정해줘야 할 일

터미널서버클라이언트나 rdesktop을 이용해서 접속하려는 윈도우즈컴퓨터의 버전은 XP Professional이거나 그 이상이어야합니다. 접속하려면 먼저 윈도우즈컴퓨터에서 몇가지 해줘야 할 일이 있습니다.

윈도우즈 암호가 abcde, aaaaaaaaa, iamking처럼 약한 암호라면 강한 암호로 바꿔줍니다. 10자는 넘어야되고 사전에서 찾을 수 있는 단어의 단순한 조합은 안됩니다. 강한 암호로 바꾸는 이유는 윈도우즈에서 원격접속서비스를 키면 그 컴퓨터가 있는 곳으로 직접 가지 않고도 누구든지 원격으로 접속을 시도할 수 있기 때문입니다. 자동으로 수많은 암호를 입력해보는 프로그램을 이용해서 접속을 시도하는 사람들이 있을지도 모릅니다.

원격 데스크톱 연결 사용에서 "연결할 컴퓨터에서 원격 연결을 허용"이라는 부분을 읽어보시거나 컴퓨터를 원격 데스크톱으로 설정를 읽어보고 거기에 나온데로 윈도우즈컴퓨터에서 원격연결을 허용해줍니다.

그 다음에는 보안을 위해서 만약 윈도우즈컴퓨터로 접속하려는 컴퓨터의 아이피가 자기가 가지고 있는 리눅스컴퓨터의 아이피주소가 아닐 경우 접속을 거부하도록 방화벽설정을 해주면 좋습니다. 그럴려면 제어판을 열고 윈도우즈방화벽을 엽니다. (스크린샷 참조) 예왜탭으로 가서 "원격 데스크톱"가 체크상태인지 확인해보고(체크상태여야함) 이걸 선택한 상태에서 편집버튼을 눌러서 나오는 대화상자에서 범위변경버튼을 누른 후 거기에서 윈도우즈컴퓨터로 원격 접속을 허용하고 싶은 컴퓨터들의 아이피주소를 입력해줍니다.

윈도우즈 방화벽 원격접속 아이피 제한

스크린샷이 작아서 잘 안보이는 분은 스크린샷에 마우스커서를 대고 마우스오른쪽버튼을 누른 후 이미지보기를 누릅니다. 그것도 안되면 이 글 맨 밑에 링크걸린 첨부파일을 다운받습니다.

윈도우즈에서 준비할 건 이게 끝입니다. 이제 리눅스 컴퓨터로 갑시다.

리눅스 컴퓨터에서 할 일

리눅스 컴퓨터에 rdesktop을 설치합니다. 우분투 사용하시는 분들은 이미 설치가 되어있고 나머지는 해당 배포판의 게시판에서 설치방법을 찾아보시거나 rdestkop 홈페이지에 가서 읽어보고 직접 설치합니다. (터미널창에 rdesktop를 입력해보면 rdesktop이 이미 설치되어있는지 알 수 있습니다.)

rdesktop이 설치가 되었다면 이제 원격접속을 시도해봐야겠지요. 자 터미널창을 엽니다. (우분투사용자의 경우 터미널창을 여는 방법은 프로그램->보조프로그램->터미널) 명령을 실행하려면 명령을 입력한 후 엔터를 눌러야하는 것쯤은 알아두시고...

원격컴퓨터 윈도우 사용자이름(윈도우즈 켜서 로그인할 때의 이름)과 로컬컴퓨터 리눅스 사용자 이름(리눅스 컴퓨터 키거나 로그인할 때 선택하거나 입력하는 그 이름)이 같고 윈도우컴퓨터의 아이피주소가 고정된 주소(예를 들어 143.210.123.456라고 가정)라면 로컬컴퓨터 앞에서 터미널 창을 열어서 다음과 같은 명령을 실행합시다.

rdesktop 143.210.123.456

만약 사용자이름이 서로 다르고 윈도우즈사용자이름이 john이라면 다음과 같은 명령을 실행해야합니다.

rdesktop -u john 143.210.123.456

그러면 윈도우즈로 원격접속이 되서 화면이 바뀌고 윈도우즈 로그인암호를 물어보는 윈도창이 외롭게 떡하니 뜨는데 윈도우즈암호를 입력해줍니다. 그러면 원격컴퓨터의 화면이 뜰 겁니다. 원격접속을 끊고 다시 로컬컴퓨터 리눅스의 화면으로 돌아오려면 윈도우즈 시작버튼을 누릅니다 그러면 윈도우즈종료버튼 대신 연결끊는 버튼이 있을텐데 그걸 누르면 됩니다.

하라는 데로 명령을 실행했는데 로그인창이 뜨기는 커녕 아무일도 안 일어난다는 분들이 있을 텐데요. 원인이 뭘까요. 혹시 rdesktop명령을 실행할 때 윈도우즈컴퓨터가 꺼진 상태였던 건 아닙니까? 원격접속하려면 켜진 상태여야합니다. rdesktop프로그램이 알아서 켜주지는 않습니다. 혹시 명령을 그냥 복사해서 터미널창에 붙여넣기했습니까? 위에서 예시로 제시한 명령에서 143.210.123.456은 자기꺼 윈도우즈의 아이피주소로 바꿔서 입력하셔야지요. john도 자신의 윈도우즈로그인이름으로 바꿔야되구요. 앞으로 나오는 명령도 알아서 바꿔서 입력해주시길.

도대체 아이피주소라는게 뭐냐 내 윈도우즈 컴퓨터의 아이피주소가 뭔지 모르겠다는 분들은 What is My IP Address라는 사이트를 윈도컴퓨터에서 방문하시면 알려줍니다. 이 숫자가 윈도우즈 부팅할 때마다 바뀌는 분은 DynIP가 제공하는 Dynamic DNS 서비스를 이용하시면 고정된 아이피주소 비슷한 걸 받을 수 있습니다. (참고 : Dynamic DNS Providers List)

저는 대개의 경우는 다음 두 가지 명령 중 하나를 쓰는 걸 권장합니다.

첫번째 명령 :

rdesktop -u john -k ko -fP 143.210.123.456

두번째 명령 :
rdesktop -u john -k ko -g 100% -PKD 143.210.123.456

두 명령 다 원격컴퓨터화면을 전체화면으로 보여줍니다. (관련옵션 : 첫번째 명령에서 -f, 두번째 명령에서는 -g 100% -D.) 두 명령 모두 옵션 -P를 통해서 비트맵캐쉬(bitmap cache)옵션을 켜주는데 이러면 반응속도가 빨라집니다. 접속을 끊지 않고 전체화면모드에서 나가기만 하려면 Ctrl+Alt+Enter를 누릅니다. 다시 전체화면으로 가려면 Ctrl+Alt+Enter를 다시 눌러주면 됩니다. (참고사항 : -k ko는 한영키가 원격에서도 작동하게 하려고 넣은 옵션)

위의 두 명령 중 첫번째 명령으로 원격접속한 후 Alt+TAb(창 전환 단축키)을 누르면 로컬컴퓨터 리눅스에서 창전환이 되는게 아니라 원격컴퓨터 윈도우즈에서 창전환이 일어납니다. Alt+Tab은 윈도우즈와 리눅스데스크탑 모두에서 창전환 단축키인데 그걸 원격에서 잡아챈 겁니다. 이건 좋은 거죠? 그런데 다른 키도 다 잡아갑니다. Ctrl+Alt를 누른 상태에서 오른쪽방향키를 누르면 이게 리눅스 작업공간 전환 단축키이니까 작업공간 전환이 일어나야 되는데 안 일어나고 그냥 원격컴퓨터윈도우즈가 다 먹습니다. 이건 안 좋죠? 다른 작업공간을 보려면 일단 전체화면모드에서 나가주는 수 밖에 없습니다.

작업공간 얘기가 뭔소린지 모르겠다는 분은 리눅스의 가상 작업공간에 대한 글을 읽어보시거나 우분투 소개글의 작업공간 부분을 읽어보세요.

두번째 명령으로 접속하면 반대의 현상이 일어납니다. 그때는 Alt+Tab을 누르면 리눅스 데스크탑에서 창전환이 일어납니다. 불편하겠지요. 일부 이걸 원하는 사람들도 있긴 하겠지만.. 그리고 Ctrl+Alt+방향키를 누르면 리눅스 작업공간 전환이 됩니다. 이거 잘 쓰면 유용합니다. 리눅스 첫번째 작업공간에서 작업하고 있다가 두번째 작업공간으로 가서 터미널창 열고 두번째 명령을 입력해서 윈도우즈로 원격접속하면 두번째 작업공간에 전체화면으로 원격컴퓨터 윈도우즈의 화면이 뜨는데 그 상태로 있다가 갑자기 로컬컴퓨터작업이 하고 싶으면 첫번째 작업공간으로 오고 그러다가 다시 원격컴퓨터작업하고 싶으면 두번째 작업공간으로 가는 식으로 사용하면 편합니다. 이런 식으로 사용하면 로컬에서 어떤 텍스트를 복사해서 원격에서 붙여넣기를 하거나 할 때 편합니다.

원격에서 창전환을 Alt+tab으로 창전환하고 싶은 분은 첫번째 명령이 좋습니다만 첫번째 명령으로 원격접속하면 전체화면모드를 나가기 전에는 클립보드 공유가 잘 안되는 버그가 있습니다. 자세한 사항은 여기.를 방문하세요. 그래서 원격과 로컬 사이에서 붙여넣거나 복사하는 작업을 많이 할려면 두번째 명령을 써야 합니다.

원격컴퓨터의 윈도우즈에서도 리눅스처럼 텍스트를 마우스로 긁기만 해도 클립보드로 복사가 되고 마우스의 중간버튼을 눌러서 붙여넣기가 되게 하려면 윈도우즈에 dragking을 설치합니다. dragking.ahk가 작동하려면 ahkstructlib.ahk가 필요하니까 그것도 다운받아서 dragking.ahk가 있는 폴더에 다운받습니다.

우분투 바탕화면에 원격접속아이콘 만들기

원격접속할 때마다 터미널창 열어서 어려운 명령어 입력해서 접속하려니까 좀 귀찮지요.

터미널창에서 Ctrl+R을 눌러보세요. 그러면 (revers-i-search)라고 하면서 뭐가 나오는데 그 상태에서 rdesktop이라고 입력하면 예전에 입력했던 명령들 중에서 rdesktop이라는 단어를 포함하는 가장 최근의 명령을 찾아서 보여줍니다 이상태에서 Ctrl+R을 한번 더 눌러주면 두번째로 최근의 명령을 보여줍니다. 계속 Ctrl+R을 눌러줘서 찾고자 하는 명령이 나왔으면 엔터키를 누르면 그 명령이 실행되고 Ctrl+C를 눌러주면 아무것도 안하고 명령검색이 취소됩니다. 즉 터미널창에 복잡한 명령을 한번만 입력해주면 나중에는 찾아서 입력할 수 있습니다. (마치 텍스트 에디터의 최근 문서 나열하는 기능과 비슷합니다. 우분투의 경우 위치->최근문서와 비슷.)

그래도 터미널창 계속 열어주는 게 귀찮죠. 그냥 바탕화면에 아이콘 하나 눌러서 원격접속했으면 좋겠지요. 우분투를 쓰시는 분은 바탕화면에서 마우스 오른쪽클릭한 후 "실행 아이콘 만들기..."를 누른 후, 다음 스크린샷처럼 명령어칸에 자신이 사용하고자 하는 명령어를 입력하고 나머지 칸은 대충 쓴 후 확인을 눌러주면 바탕화면에 실행아이콘이 생깁니다. 만약 쓰고자 하는 명령어에 %가 포함되있으면 명령어칸에 입력할 때에는 %를 %%로 바꿔서 써줘야합니다. (팁 : 실행아이콘에 쓸 이미지를 그럴싸 한 걸로 선택하려면 실행아이콘 만들 때 왼쪽에 있는 스프링처럼 생긴 걸 눌러서 맘에 드는 이미지를 골라주면 됩니다 맨 마지막 쯤에 나오는 vinagre.svg가 쓸만합니다.)

실행아이콘 만들기

rdesktop의 유용한 옵션

-r disk:doc=/home/john/Documents,pic=/home/john/Pictures
rdesktop명령에 이 옵션을 추가해서 접속한 후 '내 컴퓨터' 아이콘을 누르면 거기에 /home/john/Documents폴더와 /home/john/Pictures폴더가 각각 doc과 pic이라는 이름으로 나타납니다. 이렇게 하면 원격컴퓨터의 윈도우즈 프로그램으로 로컬컴퓨터의 파일을 열거보거나 수정하거나 파일을 옮기거나 할 수있습니다.

-r sound:local
이 옵션은 원격컴퓨터에서의 소리가 로컬(local)컴퓨터에서 나도록 하는 옵션입니다. 이런 거나 원격에서 인쇄하면 로컬에서 인쇄되도록 하거나 하는 기능을 device redirection이라고 부르는데 이에 대해서 더 자세히 알고 싶은 분은 /usr/share/doc/rdesktop/redirection.txt를 읽어보십쇼. (이 파일이 없는 분은 터미널창에 locate redirection.txt를 실행해서 찾아보세요)

-k ja
rdesktop명령어를 입력할 때 -k ko대신 -k ja라는 옵션을 설정해주면 원격컴퓨터에서 일본어로 작업할 수 있습니다. 다른 언어는 /usr/share/doc/rdesktop/keymap-names.txt를 읽어보세요.

-p os83ks93
이 옵션은 윈도우즈로그인암호(이 경우 os83ks93)를 미리 입력해주는 옵션입니다. 편하다고 이 옵션 사용하기전에rdesktop Insecure password handling을 읽어보세요.

-0
이 옵션은 attach to console 옵션인데 이 옵션없이 원격접속하면 원격데스크탑의 원래사용자가 로그아웃됩니다. 원격데스크탑 앞에 있는 사람과 로컬컴퓨터 앞에 있는 사람 둘이서 같이 작업하려면 이 옵션을 켜줘야합니다. (알파벳 o가 아니라 숫자 0이라는 걸 명심.)

rdesktop의 옵션 목록을 간략하게 보시려면 터미널에 rdesktop를 입력하시고 더 자세하게 보시려면 man rdesktop를 입력하세요. (아직 번역이 안된 것 같네요.)

rdesktop으로 연결하면 기본적으로 트래픽이 암호화됩니다. 즉, 네트워크상에서 트래픽을 엿듣기좋아하는 사람에게는 원격컴퓨터와 로컬컴퓨터사이의 대화내용이 암호화된 상태로 293s93js9r2j29w9m8235m2x80wdx3....처럼 보이는 겁니다. 그렇기에 rdesktop사용은 어느 정도의 보안이 보장됩니다. 그런데 rdesktop은 Man in the middle attack이라는 공격에 취약합니다. Man in the middle attack이 뭔지 궁금하신 분은 http://en.wikipedia.org/wiki/Man-in-the-middle_attack를 방문하세요.

이런 공격으로부터 보호받으려면 SSH의 포트포워딩과 함께 SSH의 finger print(지문)기능을 이용해야 합니다. 그런데 SSH이용하는게 초보자들에게는 굉장히 어렵지요. 내 컴퓨터를 호시탐탐 노리고 있는 해커가 있을 것 같다는 분은 SSH포트포워딩을 이용해야겠지만 대부분은 SSH포워딩을 이용 안해도 괜찮을 꺼예요.

SSH를 이용해 rdesktop의 보안을 강화하기

SSH터널을 사용하고 싶은 분은 먼저 윈도우즈에 SSH서버를 깔고 돌려야합니다. cygwin과 ssh서버를 까는 방법을 초보자도 알기 쉽게 설명한 글을 읽어보시려면 lifehacker personal ssh server article을 읽어보세요. UNIX, SSH, CYGWIN에 대해서 잘 모르는 사람들이 이해할 수 있는 진짜 완벽한 글인데 단점이라면 영어라는 거?. 한글로 된 글은 윈도우에 cygwin설치 및 ssh서버 설정를 읽어보세요.

위의 링크된 글을 보면 c:\cygwin\etc\defaults\etc\sshd_config(ssh서버 설정 텍스트 파일)의 내용을 수정하라는 내용이 나옵니다. cygwin폴더 밑에 있는 텍스트파일을 수정할 때에는 notepad2처럼 UNIX텍스트포멧을 지원하는 프로그램을 사용하시는게 좋습니다.

윈도우즈방화벽에서 원격데스크톱서비스에 접근가능한 아이피를 제한했던 것처럼 SSH서버에 접근할 아이피도 제한할 수 있습니다. 보안을 위해서는 제한을 해주는게 좋겠죠. 윈도우즈에서 시작 --> 모든 프로그램 --> Cygwin --> Cygwin Bash Shell을 실행하면 나오는 터미널창에서 다음 명령을 실행합니다.

ssh-keygen -lf /etc/ssh_host_rsa_key.pub

명령을 실행했을 때 나오는 RSA Key fingerprint를 메모해놓습니다. 이거 나중에 필요합니다.

이제 리눅스 로컬컴퓨터로 돌아와서 터미널창에 telnet localhost 3389를 실행합니다. localhost(리눅스로컬컴퓨터 자신)의 포트 3389로 접속을 시도하는 명령인데 대개의 경우 이 명령을 실행하면 다음과 같은 결과가 나와야합니다.

$ telnet localhost 3389
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
이런 결과가 나오면 SSH포워딩으로 rdesktop을 사용할 때 이 포트(3389)를 이용할 수 있습니다. 만약 결과가 다음과 같다면 로컬컴퓨터의 3389포트는 이미 어떤 서버프로그램이 사용중인 포트입니다.
$ telnet localhost 3389
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

결과가 첫번째처럼 나왔다면 다음과 같은 명령을 통해서 리눅스에서 윈도우즈 원격 접속 서비스로 ssh포트포워딩을 합니다.

ssh -L 3389:localhost:3389 john@143.210.123.456

이 명령은 리눅스로컬컴퓨터의 3389포트를 윈도우즈의 3389포트(윈도우즈 원격 접속 서비스가 쓰는 포트)로 포워딩합니다. 명령을 실행하면 다음과 같은 메세지가 나와야 합니다.

$ ssh -L 3389:localhost:3389 john@143.210.123.456
The authenticity of host '143.210.123.456 (143.210.123.456)' can't be established.
RSA key fingerprint is f3:90:3b:70:20:a2:52:fe:fx:a2:90:70:3b:f3:6a:22.
Are you sure you want to continue connecting (yes/no)? 

메세지에 뜬 RSA key finger print가 윈도우즈에 SSH서버설정하면서 메모한 RSA key finger print와 동일한지 확인합니다. 만약 동일하지 않다면 no라고 대답해야합니다. 왜냐하면 이 경우 지금 ssh로 접속한 컴퓨터는 님의 윈도우즈컴퓨터가 아니라 님의 윈도우컴인 척하는 가짜일 가능성이 크기 때문입니다 즉 man in the middle일 가능성이 큽니다.

만약 동일하다면 yes라고 대답합니다. 그러면 암호를 물어보는데 윈도우즈암호를 입력해주면 이제 터미널창에서 ssh세션이 시작됩니다. 여기서 입력하는 명령어는 전부 원격컴퓨터에서 작동합니다. 마치 원격컴퓨터의 터미널창이 로컬컴퓨터 앞에 짠하고 나타난 것 같죠? ssh세션에서 나가려면 exit을 입력하면 됩니다만 아직은 나가지 마세요. ssh세션을 끄지 않고 그대로 놔둔 상태에서 터미널창을 한 개 더 연 후 새 터미널창에서 다음 명령을 실행하세요

rdesktop -u john localhost

그러면 SSH를 통해서 윈도우즈로 원격 접속되니다. 그런데 명령이 좀 이상해보이지 않습니까? 리눅스컴퓨터 앞에 앉아서 리눅스로컬컴퓨터로 즉 자기자신으로 원격접속한다는 뜻인 것 같죠? 맞습니다. 이 명령을 실행하면 rdesktop프로그램이 로컬컴퓨터의 3389포트(원격접속서비스 기본포트)로 접속하는데 처음 터미널창에서 해준 작업 때문에 로컬컴퓨터의 3389포트가 원격컴퓨터의 3389포트로 암호화된 터널로 연결된 상태라서 결과적으로는 마치 rdesktop이 원격컴퓨터로 접속한 것처럼 됩니다. (위의 rdesktop명령은 옵션설정이 거의 없는데 알아서 설정하시길. 제가 맨 위에서 권장했던 두 명령처럼 설정하면 됩니다.)

지금 ssh세션을 끄면 연결이 끊겨서 rdesktop의 원격접속 연결도 같이 끊기게 되겠죠? 그런 방식으로 원격접속을 끊는 건 비추고 윈도우즈 시작메뉴를 통해서 먼저 윈도원격접속을 끊은 후에 ssh세션을 종료하는 걸 권장합니다. 그런데 ssh세션 종료하지 않고 놔두면 편한 점이 있는데 나중에 다시 SSH를 통해서 rdesktop연결을 쓸 때에 ssh포워딩을 따로 시작해주지 않아도 된다는 점입니다 이미 하나 시작해논 걸 안 껐으니까.

SSH포워딩을 사용해서 rdesktop을 쓰면 약간 속도가 느려집니다 이건 아마 cygwin이 느려서 그럴 거니다. (그래도 VNC보다는 빠를 거예요)

만약 telnet localhost 3389를 실행했을 때 이미 사용중인 포트라는 결과가 나왔다면? 그럴 땐 사용중이지 않은 다른 포트를 찾아야 합니다. 3099포트를 시험해봅시다. telnet localhost 3099를 실행해서 3099가 이미사용중인 포트인지 아니면 사용가능한 포트인지 확인해보고 사용가능한 포트이면 다음과같은 명령을 입력합니다.

ssh -L 3099:localhost:3389 john@143.210.123.456

이 명령은 로컬컴퓨터의 3099포트를 윈도우즈의 3389포트(원격접속서비스의 기본포트)로 포워딩하면서 ssh세션을 시작합니다.

새 터미널창을 열고 다음 명령을 실행하면 윈도우즈로 원격접속됩니다.


반응형

'업무이야기 > Linux' 카테고리의 다른 글

리눅스에서 CIFS 마운트 하기  (0) 2012.11.08
Linux Cluster Overview  (0) 2012.10.18
Linux Export  (0) 2012.10.18
Zeroboard4  (0) 2011.09.07
Zero Board XE (XpressEngine)  (1) 2011.09.04