• 본 문서는 Linux 사설 환경에서 HTTP/HTTPS Proxy를 이용해서 git SSH 접근을 이용하는 방법에 대해서 소개하고 있습니다.

Github

원격 저장소로 유명한 github. 이 사이트를 통해서 작업을 할 때 HTTPS 주소로 접근하면(remote로 설정하면) push 등의 작업을 할 때 마다 인증을 해야하는 번거로움 때문에 꽤나 많은 분들이 SSH Key 방식의 인증을 선호하곤 한다.

물론 credential cache를 이용하면 HTTPS 인증이 좀 더 수월하며 이에 대한 내용은 이 문서를 참고하면 된다.

HTTP/S Proxy

일반적으로 사설IP 환경에서 외부 웹 페이지를 접근하기 위해서 HTTP Proxy를 사용하여 접근한다. 따라서, 사설IP 환경에서 SSH Key 방식의 인증으로 github을 사용하려면 SOCKS Proxy가 필요한데 경우에 따라서는 이런 Proxy가 제공되지 않을 때가 많다. 본 문서에서는 HTTP/HTTPS Proxy만 제공되는 사설환경에서 github을 SSH 방식으로 접근하는 방법을 소개하고자 한다.

해결방안

생각보다 간단하다. 기본적으로 대부분 HTTP/HTTPS Proxy도 SOCKS Proxy와 크게 다르지 않게 데이터를 포워딩하는 형태이기 때문에 git이 SSH 기반 주소를 접근할 때 HTTP/HTTPS Proxy를 이용하도록 넘겨주기만 하면 된다.

하지만, 보통 http/https Proxy를 Linux에서 범용으로 사용할 때 http_proxy, https_proxy 환경변수를 이용하는데 이는 git이 https 주소를 접근할 때나 사용하지 ssh 주소를 접근할 때는 이용하지 않는다. 그렇기 때문에 아래와 같은 설정을 추가해주면 된다.

먼저 홈디렉토리 아래에 ssh client config 파일을 편집기로 연다. ($HOME/.ssh/config)

$ vim ~/.ssh/config

그리고, 아래 내용을 설정파일에 추가해 준다.

Host github.com
   ProxyCommand          nc -X connect -x 서버주소:포트번호 %h %p
   ServerAliveInterval   10

서버주소와 포트번호에는 HTTP Proxy의 주소와 포트번호를 넣는다. (프로토콜 지시자는 생략한다. 예를들면 example.com:3128 형식)

ssh client 설정으로 위와 같은 proxy 명령을 추가하면 시스템 엔지니어의 맥가이버 칼과 같은 nc(netcat)가 git이 시도하는 ssh 접속을 HTTP Proxy 서버로 넘겨준다. 이렇게해서 별다른 문제 없이 외부에 있는 github 서버에 SSH Key 방식으로 인증하고 접근 할 수 있다.

결론은..

허무할 정도로 간단한 위 내용은 사실 git/github에 대한 Tip이라기 보다 nc의 활용방안 중 하나인 내용이다. 나중에 시간이 된다면 여러가지 작업을 할 수 있는 nc에 대해서 상세히 소개해 보려고 한다. 끝.