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 파일에 터널링으로 사용할 서버의 정보를 설정합니다.
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 로 빨라졌습니다.