| 종류 | 옵션 | 핵심 아이디어 | 주요 용도 |
|---|---|---|---|
| Local | -L |
내 문을 통해 밖으로 나감 | 내부망 서비스 접속 |
| Remote | -R |
저쪽 문을 통해 나에게 들어옴 | 내 로컬 서비스를 외부에 공개 |
| Dynamic | -D |
목적지 제한 없는 통로 생성 | 보안 웹 서핑, 프록시 |
내 컴퓨터에 특정 문을 하나 만드는 것. 그 문으로 들어가는 모든 데이터는 SSH 터널을 타고 원격 서버로 날아간 뒤, 거기서 최종 목적지로 전달된다.
-L [local port]:[remote ip]:[remote port]
내가 접속한 원격 서버에 문을 하나 만든다. 누군가 그 서버의 문으로 들어오면 SSH 터널을 거꾸로 타고 내 컴퓨터로 들어오게 된다.
# Note, this has to be enabled in the remote host's config, and is typically off by default
-R [remote port]:[dest ip]:[dest port]
위의 두 방식은 목적지를 딱 하나로 정해야 한다. 하지만 -D 는 목적지를 정하지 않는다. 일단 내 컴퓨터에 문을 하나 열어두면, 그 문을 통하는 모든 데이터가 SSH 서버를 통해 어디든 갈 수 있다.
-D [port]
<aside>
집에서 회사 내부망 데이터 베이스에 접속하고 싶을 때. 회사 DB 서버는 보안상 외부 인터넷에서 직접 접속이 불가능하다. 오직 회사에 있는 점프 서버(SSH 서버)를 통해서만 들어갈 수 있는 상황이다.
ssh -L 5555:10.0.0.50:3306 user@work.ssh.com이제 내 컴퓨터에서 localhost:5555로 접속하면, 데이터가 SSH 터널을 타고 work.ssh.com까지 간 뒤, 거기서 다시 10.0.0.50:3306으로 전달된다. 내 컴퓨터 입장에서는 회사 DB가 바로 옆에 있는 것처럼 느껴지게 된다.
</aside>
<aside>
내 노트북에서 만든 웹사이트를 멀리 있는 친구에게 보여주고 싶을 때. 내 노트북은 카페 Wi-Fi를 쓰고 있어서 외부에서 접속할 수 있는 공인 IP가 없다. 하지만 나에게는 외부에서 접속 가능한 개인 클라우드 서버가 하나 있다.
ssh -R 9000:localhost:8080 user@my-cloud.com이제 친구가 브라우저에 http://my-cloud.com:9000을 입력하면, 그 요청은 클라우드 서버를 거쳐 거꾸로 SSH 터널을 타고 내 노트북의 8080포트로 도달하게 된다. 카페 방화벽을 뚫고 내 노트북까지 길이 열린 셈.
</aside>
<aside>
보안이 취약한 공용 Wi-Fi에서 안전하게 웹 서핑하고 싶을 때. 스타벅스 Wi-Fi를 쓰고 있는데, 내 접속 기록을 누가 훔쳐볼까 봐 걱정된다. 이때 내 집에 있는 리눅스 서버를 경유지로 삼아 모든 인터넷 트래픽을 암호화하고 싶다.
ssh -D 1080 user@home.server.com내 노트북에 1080 포트로 SOCKS 프록시가 만들어진다. 브라우저 설정에서 프록시 서버를 localhost:1080으로 지정하면, 내가 구글을 가든 네이버를 가든 모든 데이터는 암호화된 터널을 지나 집 서버를 통해서 인터넷으로 나간다. 스타벅스 주인은 내가 뭘 하는지 전혀 알 수 없다.
</aside>