출처 : http://simples.kr/bbs/board.php?bo_table=03_2&wr_id=79
Contents
1 이 문서가 필요한 곳
2 필요한 것
3 방법
3.1 ssh -R 에 대해
3.2 ssh -L 에 대해
3.3 접속
4 실제의 예 1 (ssh서비스 이용하기)
4.1 my_office_pc 에서
4.2 my_home_adsl_pc 에서
5 실제의 예 2 (터미널 서비스 이용하기)
5.1 my_office_pc 에서
5.2 my_home_adsl_pc 에서
6 맺는 말
7 질문과 답변
8 토론
작성 : 김원일
[edit]1 이 문서가 필요한 곳 ¶
회사나 가정에서 작업하던 환경을 그대로 쓰고 싶지만 vpn 이나 firewall 등의 제한으로 외부에서 접근하기가 쉽지 않은 경우가 있다. proxy 가 있거나 vpn 이라면 별 다른 문제가 없을 수도 있겠으나 firewall 같은 경우 넷웍 관리자에게 요청하지 않는 이상, 또는 요청한다고 해도 그다지 쉽게 허가를 얻지 못할 것이다. vpn 이라고 해도 외부의 누군가에게 잠깐 내부의 자원을 이용하게 하기위해 자신의 vpn 접속 방법을 가르쳐 주는 것도 양심상, 보안상 그다지 권장하고 싶은 일은 아니다. 이 문서는 그러한 경우 외부에서 접근 가능한 ssh계정을 이용해 터널을 만들어 vpn, firewall 외부에서 그 안쪽으로 접근을 가능하게 하는 방법이다.
[edit]2 필요한 것 ¶
OpenSSH (ssh protcol 2 이상을 가정)
vpn 및 firewall 외부에 ssh 로 접속이 가능한 계정
임은재님이 작성하신 ssh Howto, ssh + mini proxy 등을 미리 읽어 두는 것이 도움이 된다.
[edit]3 방법 ¶
[edit]3.1 ssh -R 에 대해 ¶
ssh -R 은 원격서버의 특정 포트를 자신이 접근 가능한 서버 및 포트 (이문서에서는 vpn 안쪽의 자신의 서버 또는 작업을 하려는 서버)로 포워딩 하는 것이다. ssh -L 의 역이라고 봐도 무방하다 (ssh -L 에 대해서는 ssh mini proxy 문서를 참조하자)
vpn 또는 firewall 안쪽의 PC 에서
ssh -R port:host:hostport ssh_user@ssh_server
와 같은 명령을 사용한다.
ssh_server서버에 ssh_user라는 계정으로 접속하되 port로 지정한 포트로 들어오는 패킷을 host의 hostport로 포워딩한다는 것이다. 언뜻 알기 어렵지만 차근 차근 이해해 보자.
port : ssh_server에서 열 포트 번호다. (여기서 ssh_user가 ssh_server의 루트가 아니라면 1024번 이상의 포트번호를 지정해야 한다)
host : vpn 및 firewall 안쪽에 있는 우리가 바깥에서 사용할 서버의 ip 또는 이름이다. (꼭 안쪽에 있을 필요는 없다. ssh -R ... 명령을 내리는 자신의 컴퓨터에서 접근 가능해야 한다)
hostport : 위의 host 에서 우리가 이용하려는 서비스가 열려있는 포트 번호다. (역시 접근 가능해야 한다)
이상과 같이 하면 hostname의 loopback 주소(127.0.0.1)에서 port를 리스닝하게 된다. nestat -nl 로 확인해보라. loopback 주소로만 listening하는 것은 sshd 설정상 기본이다.
[edit]3.2 ssh -L 에 대해 ¶
이제 우리가 원하는 우회로의 반은 열린 셈이다. 나머지 반을 열어보자.
ssh -L localport:localhost:port ssh_user@ssh_server
이 명령은 vpn 또는 firewall 바깥의 환경에서 쓰이게 된다. 즉 집이나 외부업체의 회의실 또는 외딴 섬마을 학교의 pc실에서 쓰인다는 것이다.
localport : 현재 작업 중인 컴퓨터에서 열릴 포트이다. (netstat -nl 에서 Listen 중인 것으로 나타날 것이다)
localhost : 말 그대로 localhost라고 적는 것이다. 127.0.0.1 도 무방하다. 여기서 localhost 는 ssh_server의 루프백 주소를 가리킨다.
port : ssh -R 에서의 port 와 같다.
이제 모든 우회로가 열렸다!
[edit]3.3 접속 ¶
우회로를 이용하는 건 다음과 같다.
telnet localhost localport (telnet 서비스를 우회해서 접속할 경우)
http://localhost:localport/ (http 서비스의 경우)
ssh -p localport localhost (ssh 서비스의 경우)
smbclient -p localport localhost (삼바 서비스의 경우)
즉 모든 접속은 localhost로 ssh -L 에서 지정한 localport를 이용하게 된다.
[edit]4 실제의 예 1 (ssh서비스 이용하기) ¶
여기서는 실제로 명령어를 다루는 예를 들겠다. 다음과 같은 컴퓨터들이 등장한다.
my_office_pc (IP : 224.20.X.22 under Firewall)
ssh_server (IP : 210.32.X.221)
my_home_adsl_pc (IP: 61.78.X.226)
지금 시각은 오후 5:32분, 내일 오전까지 끝내야할 작업이 거의 다 끝나가지만 잔업은 하기 싫다. 집에서 작업하고 싶지만 방화벽 때문에 외부에서는 접속할 수가 없는 처지다.
[edit]4.1 my_office_pc 에서 ¶
my_office_pc ~$ ssh -R 22:localhost:22 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
이제 짐을 싸고 정리한 후 퇴근한다!
[edit]4.2 my_home_adsl_pc 에서 ¶
my_home_adsl_pc ~$ ssh -L 2222:localhost:22 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
다른 터미널을 열고
my_home_adsl_pc ~$ ssh -p 2222 localhost
myaccout@localhost`s password: _ <-- my_office_pc 의 패스워드 입력
my_office_pc $ _ <--- 사무실에 ssh 로 연결 되었다!!!
마무리 작업을 하고 맥주 한잔!
[edit]5 실제의 예 2 (터미널 서비스 이용하기) ¶
여기서는 실제로 명령어를 다루는 예를 들겠다. 다음과 같은 컴퓨터들이 등장한다.
my_office_pc (IP : 224.20.X.22 under Firewall,Windows XP)
ssh_server (IP : 210.32.X.221)
my_home_adsl_pc (IP: 61.78.X.226)
지금 시각은 오후 5:45분, 내일 오전까지 끝내야할 작업이 거의 다 끝나가지만 잔업은 진짜!! 하기 싫다. 집에서 작업하고 싶지만 방화벽 때문에 외부에서는 접속할 수가 없는 처지다.
[edit]5.1 my_office_pc 에서 ¶
지금의 사무실의 컴퓨터는 윈도우 환경이다. 윈도우에서는 별도의 ssh 프로그램이 필요하다.
putty (터널링이 가능한 최신 버젼)
plink (putty 의 자매 프로그램, windows console 에서 사용 가능하다. plink -R 또는 plink -L 로 unix 에서와 유사하게 사용한다.
ssh (cygwin 환경에서 사용가능)
plink 를 사용해보기로 하자.
> plink -R 3389:localhost:3389 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
이제 짐을 싸고 정리한 후 퇴근한다!
[edit]5.2 my_home_adsl_pc 에서 ¶
집의 PC는 linux 또는 rdesktop 을 사용해야 한다. 이유는 MS에서 제공하는 windows용 terminal client는 별도로 IP를 확인하기 때문에 인증이 이루어지고도 사용은 불가능하다.
my_home_adsl_pc ~$ ssh -L 3389:localhost:3389 210.32.X.221
myaccout@210.32.X.221's password: _ <-- ssh_server 패스워드 입력
ssh_server ~$ _
다른 터미널을 열고
my_home_adsl_pc ~$ rdesktop localhost:3389 (포트번호는 생략가능)
//rdektop에서 my_office_pc의 윈도우 계정 패스워드 입력
//rdesktop이 시작된다.
마무리 작업을 하고 맥주 한잔!
[edit]6 맺는 말 ¶
원래는 친구 회사의 PC에서 작업을 하기 위해서 이런 방법을 생각해 보았다(어디까지나 친구 본인의 요청에 의해서). 꽤 귀찮아 보이지만 어쩔 수 없는 상황에서는 유용하리라고 생각한다. 외부에 ssh계정이 있어야 하는 단점이 있긴 하지만 그런 경우에는 각자의 집에 ssh 서비스를 이용하는 방법도 있으므로 큰 문제는 없으리라 생각한다.
[edit]7 질문과 답변 ¶
Q: IP 공유기를 사용하고 있습니다. 사설망 IP로도 접근 가능한 방법이 있나요?
A: 네. 공유기 아래의 사설망으로도 위 방법을 사용하면 가능합니다. 하지만 공유기라면 DMZ 설정이나 port forwarding이 더욱 간단하겠지요. 이 문서는 공유기나 방화벽, vpn 설정을 고칠 수 없는 일반 유저를 위한 내용입니다.
Q: 잘 사용한 후, 열어둔 터널을 닫고 싶습니다. 어떻게 해야 하나요?
A: 아~. ssh -R/-L 로 열어둔 터미널에서 나오면 되는군요.
[edit]8 토론 ¶