ssh tunnel을 사용하여 서브 버전 용 프록시를 설정하는 방법


24

로컬 연결이 느리기 때문에 프록시를 통해 코드를 체크 아웃 / 업데이트하고 싶습니다. ssh tunnel : ssh -D 8090 user@ssh.proxy.net 을 설정 하여 모든 패킷을 내 localhost : 8090으로 전달합니다.

이것을 사용하기 위해 subversion을 어떻게 설정합니까?

ssh  svn  proxy 

+1, 좋은 질문입니다. 나는 이것을 할 수있는 방법이 있는지 알고 싶습니다. Wi-Fi 속도가 매우 느리고 동일한 방식으로 설정된 SOCKS 프록시를 통해 탐색하는 경우가 많으므로 Subversion (또는 다른 사용자)이 동일하게 사용하는 것이 편리합니다.
Tim Post

그리고 프록시가 Wi-Fi를 더 빠르게합니까?
innaM 2009

답변:


21

SSH를 사용하여 SSH 서버로 터널링하는 로컬 SOCKS 서버를 설정하고 있습니다. 당신이 그렇게하는 이유는 "로컬 연결이 느리다"고 말하지만 SSH 서버로의 터널링이 어떻게 더 빨라질 지 모르겠습니다.

어쨌든 문제는 Subversion이 HTTP 프록시 또는 SSH 터널을 통해 연결할 수 있지만 SOCKS에 대해서는 전혀 모른다는 것입니다. 따라서 모든 TCP 연결을 캡처하고 SOCKS 프록시로 리디렉션하여 Subversion을 SOCKSify해야합니다.

이전에 해본 사람들을 역설하는 대신 자세한 설명을 알려 드리겠습니다.

또는 간단히 말해서 Oliver의 페이지에서 주로 붙여 넣습니다.

데비안에는 sourceforge에서도 사용할 수있는 두 개의 양말이 들어 있습니다. 가장 최근에 업데이트 된 것은 ProxyChains이며 구성이 매우 간단합니다. 대부분의 양말은 비슷한 방식으로 작동하므로 이러한 지침은 합리적인 일반적인 경우입니다. ProxyChain을 구성하려면 $ (HOME) /. proxychains / proxychains.conf를 편집하여 다음 행만 갖도록하면됩니다.

DynamicChain
tcp_read_time_out 15000
tcp_connect_time_out 10000
[ProxyList]
socks5 127.0.0.1 8090
# NB: for some reason 'localhost' doesn't work in the above line

ProxyChains에서 'wrap'svn 만하면됩니다.

proxychains svn commit

위의 예에서 svn 응용 프로그램은 TCP가 Subversion 서버에 연결하는 더 현명하지 않았습니다. SOCKS 프록시로 리디렉션되었습니다. "


고마워 이것은 나를 위해 작동합니다. OS X에 있고 DNS 전달이 필요한 경우이 프록시 체인 포크를 사용하십시오. github.com/haad/proxychains에서 'proxy_dns'행이 첫 번째 행 다음의 구성에 있는지 확인하십시오.
Gourneau

2

내가 덜 kludge-y이 방법을 발견 여기에 게시. 당신은 사용할 수 있습니다 Privoxy를을 구성에 다음 행을 추가하여, HTTP 프록시를 통해 SSH SOCKS 터널을 사용 :

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipo기본적으로 포트에서 청취하십시오 8123. 그 다음에 $HOME/.subversion/servers당신이 당신의 파괴 저장소 호스트 (들)의 이름을 지정하는 경우, 예를 들어에서 체크 아웃 할 Subversion을 호스트 그룹을 만들고 proj1.svn.domain.tld, proj2.svn.domain.tld등, 다음에 다음을 추가 [groups]섹션 :

[groups]
domain = *.svn.domain.tld

마지막으로 그룹에 블록을 추가하여 방금 추가 한 호스트 그룹에 프록시 구성을 지정하십시오.

[domain]
http-proxy-host=localhost
http-proxy-port=8123

이 후 SSH 터널없이 작업 할 때처럼 저장소에서 정상적으로 작동 할 수 있어야합니다.

HTH


"localhost : 8090"는 무엇입니까?
Deqing

@Deqing polipo가 업스트림으로 사용하는 SOCKS 프록시입니다.
Ashish SHUKLA 14시 01 분

1

터널링에 ssh -D대해서는 모르지만 다음과 같은 것을 사용합니다.

ssh -L8090:svn.server.com:22 user@other.server.com

그런 다음 터널이있는 특정 포트를 사용하여 서브 버전에 새 프로토콜을 추가하여 터널링을 수행 할 수 있습니다. ~ / .subversion / config에 다음과 같은 줄을 추가하십시오.

pssh = ssh -p8090

[tunnels]절하고 대신 SVN + SSH의 : //user@original.com 사용 SVN + pssh : // 사용자 @ localhost를

기존 작업 사본이있는 경우 사용할 수 있습니다

svn switch --relocate svn+ssh://user@original.com svn+pssh://user@localhost

새 체크 아웃을하지 않고도 작업 복사본이 연결된 주소를 전환 할 수 있습니다.


나는 잡을 수 없다. 가정 : 내가 원래 체크 아웃 : svn co svn : //code.somewhere.com/prj prj 그리고 지금 무엇을 할 수 있습니까? 기본적으로 나는 "svn + ssh : //user@ssh.proxy.net"대신 무엇을 의미하는지 이해할 수 없습니다. 감사합니다

로 작업 한 사본이있는 경우 svn co svn+ssh://code.somewhere.com/prj prj들어가서 prj/실행 svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/하면 마치 wc를 통해 svn co svn+pssh://localhost/prj prj
가져온

어쩌면 우리는 어딘가를 오해 할 것입니다. 실제로 서버 B (ssh -D 8090 user @ B)를 통해 서버 A에서 로컬 컴퓨터로 코드를 확인하고 싶습니다. 이것이 가능합니까? svn co svn + pssh : // localhost / prj prj는 내가 당신을 얻지 않으면 서버 B의 코드를 체크 아웃하는 것 같습니다.

내가 아는 ssh 터널링 으로이 문제를 해결하기 위해 업데이트되었습니다. 올바르게 이해하면 "ssh -L8090 : serverA.com : 22 user@serverB.com"을 사용하고 "svn co svn + pssh : // user @ localhost / prj prj"를 사용하여 서버 A의 코드를 확인하십시오. 서버 B를 통해 기계
blahdiblah

아! 혼란이 어디 있는지 알 것 같습니다. 터널을 설정하면 프록시 서버에서 셸이 시작되지만 svn 명령이 수행되는 위치는 아닙니다. 그것들은 컴퓨터의 별도 쉘에서 발생해야합니다. ssh의 -f 플래그는 동일한 쉘을 사용할 수 있습니다.
blahdiblah 2009

1

~ / .subversion /에서 기본 구성 파일을 살펴보십시오. 주석이 달린 유용한 예가 많이 있습니다. 프록시는 ~ / .subversion / servers에 설정됩니다.


1

가 필요있어 경우가 있습니다 윈도우 를 통해 SVN 저장소에 도착 SVN + SSH 연결로 PC 양말 프록시 서버 . 이 문제는 SSH 기능을 제공하고 다른 프록시 유형에서 작동 할 수있는 Putty로 해결할 수 있습니다. 제안 된 솔루션에는 로컬 포트 ​​전달이 필요하지 않습니다.

  1. 퍼티를 시작하고 세션을 만듭니다 (예 : socks_proxy)
  2. 프록시 호스트 이름포트 를 제출해야하는 세션 (연결-> 프록시)에 대해서만 프록시를 구성하십시오 . Putty는 SOCKS4 및 SOCKS5를 포함한 다양한 프록시 유형을 선택할 수 있습니다. 선택적 으로 프록시 액세스를위한 사용자 이름비밀번호 를 제공 할 수 있습니다.
  3. 세션을 저장하십시오. 세션에는 연결을 위해 구성된 호스트 이름 이 없습니다 .
  4. SVN 구성 파일 Application Data \ Subversion \ config를 열고 [터널] 섹션을 찾으십시오 .
  5. ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy 섹션 제목 아래에 추가 SVN 프로토콜 설명을 입력하십시오 . 실제로 프로토콜 이름이 선택되므로 ssh가 이미 사용 된 경우 이름을 선택할 수 있습니다 (예 : ssh = 대신 pssh = 사용 ).
  6. SSH가 svnserve 를 실행하는 데 사용될 대상 서버에 대한 SSH 액세스를위한 키를 구성하십시오 . 키를 유지하려면 미인을 사용하는 것이 좋습니다.
  7. svn + ssh 액세스에는 svn을 사용하십시오. 사용자 이름은 URL- svn ls svn + protocol_name : // username @ server / repository 에 전달해야 합니다. 여기서 프로토콜 이름은 SVN 구성의 [터널] 섹션에 사용 된 실제 이름으로 대체해야 합니다.

결론-SVN은 프로토콜 이름을 사용하여 plink.exe가 연결에 사용되는지 감지하고 plink는 세션 이름 socks_proxy 를 사용하여 프록시가 있는지 식별합니다. 그 기억 PATH_TO_PLINK이 되지 백 슬래시, 슬래시로 입력해야합니다. \ 프로그램 파일 \ 퍼티 : plink.exe가 C 폴더에있는 경우를위한 예 SSH = C : / 프로그램 파일 / 퍼티 / PLINK.EXE -load socks_proxy .


1

당신은 tsocks 을 시도 할 수 있습니다 . tsock을 사용하면 SOCKS 프록시 SSH 설정을 사용하도록 구성한 다음 svn을 다음과 같이 실행합니다.

tsocks svn co {etc...}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.