티스토리 뷰

openssh 의 클라이언트는 외부에 접속할 때 HTTP 프록시를 통하여 접속하는 것을 지원하지 않습니다. 하지만, 다른 유틸의 도움을 받아 접속할 수가 있지요. openssh에는 ProxyCommand 라는 옵션이 있습니다. 이것은 ssh 명령을 내릴때 서버에 직접 접속하지 않고, 다른 명령을 실행시켜 접속을 위임하고, 그 표준 입출력을 접속으로 여기겠다는 것입니다. 그 다른 명령에 HTTP 프록시를 지원하는 'nc' 를 이용하면 됩니다.

예를 들어, squid가 돌고 있는 proxyhost

nc -X connect -x proxyhost:3128 coolengineer.com 80

이런 명령을 내리면 proxyhost:3128에 접속하여 http 프로토콜을 이용하여 coolengineer.com 의 웹서비스에 접속합니다. 이후 "GET / HTTP/1.0" 와 같은 명령을 내리면 제 홈의 HTML 소스가 전송되는 것입니다.

nc -X connect -x proxyhost:3128 coolengineer.com 22

이렇게 하면 coolengineer.com의 SSH 서비스에 접속을 하겠죠. 그럼 openssh 클라이언트의 ProxyCommand 규격에 맞게 다음과 같이 하면..!

ssh -o "ProxyCommand nc -X connect -x proxyhost:3128 %h %p" coolengineer.com


짜잔! openssh 클라이언트인 ssh는 proxyhost를 거쳐서 coolengineer.com 22 번포트에 접속한 nc 의 표준 입출력을 이용하여 로그인을 진행하게 됩니다.

반응형
댓글
  • 프로필사진 june8th 근데 왜 내 nc는 -X -x 같은 옵션을 못알아먹을까? man 페이지에 TCP/IP swiss army knife라고 뜨는 nc 맞아요? 이건 proxy관련 옵션이 하나도 없는걸. 2010.05.13 23:04
  • 프로필사진 nthroot OS에 기본 설치된건 좀 상태가 다르더군용.

    netcat을 새로 받아서 설치해보세요.
    2010.07.17 20:06
댓글쓰기 폼