ssh port forwarding 을 사용해서 github 빠르게 접속하기

/wiki/spaces/JS/pages/886898887 를 공부해 보려고 github 의 저장소를 clone 하고 설치 파일을 다운로드 받는데 30% 정도만 진행하고 멈춰 버리기를 반복했습니다.

얼마전에 집 인터넷을 LG 유플러스로 바꿨는데 이것때문인지 github 나 amazon aws 등 해외에 있는 서버에 연결하는 속도가 정말 느렸습니다.


찾아보니 해외 망은 KT 가 제일 안정적이고 속도가 빠르다고 하던데 약정이 많이 남은 관계로 인터넷 제공사를 바꿀수는 없어서 프락시로 github에 연결하면 어떨까하는 생각이 들었습니다.


혹시나 해서 사용하고 있는 서울 리전에 있는 AWS AMI 에 연결한 후에 여기서 github 에 연결해 보니 매우 빠르고 집에서 AWS 연결 속도도 꽤 빨랐습니다.


그래서 아래와 같이 서울 리전을 경유지(Jump server라고도 합니다.)로 해서 github 에 연결하기로 하고 몇 번의 시행착오를 겪은 후에 공유를 위해 기록해 둡니다.


Home <------------→ AWS AMI(Seoul) <-------------------→ github


ssh tunnel 설정

먼저 ssh 의 터널링 기능을 사용하여 서울 리전에 연결하기 위해 .ssh/config 파일에  터널링으로 사용할 서버의 정보를 설정합니다.


~/.ssh/config
Host proxy-server-name
    HostName myaws.server.domain
    PreferredAuthentications publickey,password
    User ec2-user
    IdentityFile ~/.ssh/myaws.server/id_rsa.pem

HostName 은 연결할 AWS AMI 의 도메인이나 IP 를 설정합니다.

Amazon Linux 외의 리눅스를 사용할 경우 SSH를 사용하여 Linux 인스턴스에 연결 를 참고해서 적절한 사용자 명을 설정합니다.




이제 터미널을 열고 다음 명령어로 SOCKS Proxy 를 구동하며 마지막 파라미터로 .ssh/config 에 지정한 Host 를 설정합니다.

ssh -D 8123 -f -C -q -N proxy-server-name
  • -D: 8123 번 포트로 SOCKS tunnel을 진행합니다.(포트 번호는1025 - 65536 중에 지정하면 됩니다. 1024 이하는 루트만 사용가능하며 portnum_t  는 unsigned short 므로 65536이 최대값입니다.)
  • -f: fork() 를 호출해서 백그라운드 프로세스로 동작합니다.
  • -C(대문자): 데이타 전송전에 압축합니다.
  • -q:  Quiet mode 로 별도의 메시지를 출력하지 않습니다.
  • -N:  별도의 remote 커맨드를 실행하지 않겠다는 옵션으로 port forwarding 용도로만 사용할 때 유용한 옵션입니다.

이제 다음 명령으로 백그라운드로 터널링이 시작되었는지 확인합니다. 

$ ps aux | grep ssh|grep -v grep


lesstif           1353   0.0  0.0  4297476    708   ??  Ss   12:08AM   0:00.00 ssh -D 8123 -f -C -q -N proxy-server-name
lesstif           1352   0.0  0.0  4281036   4624   ??  S    12:08AM   0:00.03 /usr/bin/ssh-agent -l


git proxy 설정

이제 git 에 모든 요청을 프락시를 통해서 하겠다고 알려줘야 하며 다음 명령은 git 의 모든 요청을  로컬의 socks5 프락시로 하겠다는 의미입니다.

git config --global http.proxy socks5://localhost:8123


확인

이제 테스트를 하기 위해 용량이 큰 저장소를 clone 해 보기 위해 리눅스 커널을 clone 해 보았는데 프락시를 쓰기 전에는 220k  정도 나왔던 속도가 4.5M 로 빨라졌습니다.


Ref