ssh를 socks proxy를 통해서 접속하기

| | Comments (2) | TrackBacks (0)
JEEN님의 [ SSH ] .ssh/config 에 대해서... 라는 블로그 포스팅을 보고 뭔가 복잡한 것 같아 윈도우용 ssh클라이언트인 putty에서 socks proxy를 지정해서 ssh접속하는 기능이 생각나서 LINUX의 일반 ssh 명령에서는 어떻게 사용할까 궁금해서 여러자료를 찾아서 시도해봤다.

JEEN님의 문제는 A,B 서버가 있다면 B서버는 A서버를 통해서만 접속할 수 있어서 편리하게 B서버에 접속하고 싶다는 것인데 JEEN님의 방법은 ssh설정을 사용해서 B서버에 접속을 하면 차례로 A,B 서버 인증을 거치며 들어가는 것이다.

하지만 A가 proxy서버의 역할을 한다면 A서버를 proxy로 지정하고 B에 접속하면 B에 대한 인증만 통과하면 된다. 그럼 먼저 A를 proxy서버 역할을 하도록 ssh의 Dynamic Port Forwarding기능을 이용하여 다음처럼

ssh -N -D localhost:8888 user@hostA

명령을 내리면 password를 물어보는데 password를 입력하여  A서버에 로그인한 상태가 되고나면 이제 localhost의 8888 포트(포트는 마음대로 바꿔도 됨)는 A서버와 ssh채널로 이어져서 proxy처럼(socks4, socks5 proxy프로토콜을 지원한다.) 동작하기 때문에 이것을 proxy로 지정한 모든 접속은 ssh연결을 통해 A서버를 통해서 나가게 된다.

그러면 이제 proxy를 지정하고 B서버에 접속하려고 하면 실제 접속은 A서버를 통해서 이루어지게 될 것이므로 문제 없이 접속될 것이다.

여기서 일반적인 ssh명령이 proxy( localhost:8888 )를 사용하게 하려면 어떻게 할까?

먼저 connect라는 유틸리티를 여기서 받은 다음 gcc -o connect connect.c 로 컴파일하고 컴파일된 connect 바이너리를 path가 잡힌곳에 복사한다. 그 다음

ssh -o "ProxyCommand connect -5 -S localhost:8888 %h %p" user@hostB

처럼 명령을 내리면 proxy(ssh채널로 이어진 A서버)를 통해서 B서버로 접속하게 된다.

(옵션들의 사용법과 동작방식은 메뉴얼에 다 잘 나와있으므로 자세한 설명은 생략...)



추가:
connect를 사용해서 proxy를 지정하는 방법은 별도의 shell 스크립트를 만들거나 ssh설정에 미리 넣어놓을 수 있지만 약간 번거로운 감이 있다. 이때는 dante( http://www.inet.no/dante/ )라는 socks서버에 포함되어 있는 socksify라는 명령을 이용해서도 socks proxy를 통해서 ssh접속을 할 수 있다. ubuntu라면 sudo apt-get install dante-client 로 패키지를 설치하고 나면 socksify라는 명령도 같이 설치된다. socksify가 사용하는 proxy를 지정하기 위해서는 /etc/dante.conf 파일을 열어 다음 내용을 추가해준다.

route {
        from: 0.0.0.0/0   to: 0.0.0.0/0   via: 127.0.0.1 port = 8888
        protocol: tcp udp                # server supports tcp and udp.
        proxyprotocol: socks_v4 socks_v5 # server supports socks v4 and v5.
        method: none #username           # we are willing to authenticate via
                                         # method "none", not "username".
}

설정이 어떤 의미를 가지는지는 주석이 다 설명해주고 있으므로 패스~

이제

socksify ssh user@hostB

라고 명령을 내리면 socksify뒤에 오는 명령이 접속하려는 네트웍접속은 후킹되어서 자동으로 socks proxy를 통해서 나가게 된다. socksify는 ssh뿐만 아니라 기본으로 proxy설정을 지원하지 않는 어플리케이션에도  모두 사용할 수 있다는 장점이 있다.