Jak ustawić proxy dla subversion z tunelem ssh?

24

Chcę sprawdzić / zaktualizować kod za pośrednictwem serwera proxy, ponieważ moje połączenie lokalne jest wolne. Konfiguruję tunel ssh: ssh -D 8090 [email protected] aby przekazać wszystkie pakiety do mojego hosta lokalnego: 8090.

Jak mogę skonfigurować Subversion, aby tego używać?


źródło
+1, dobre pytanie. Chciałbym zobaczyć, czy jest na to sposób. Mam bardzo wolne wi-fi i często przeglądam przez proxy SOCKS skonfigurowane w ten sam sposób, byłoby dobrze, gdyby korzystało z niego subversion (lub inne).
Tim Post
A proxy sprawia, że ​​twoje Wi-Fi jest szybsze?
innaM

Odpowiedzi:

21

Używasz SSH, aby skonfigurować lokalny serwer SOCKS, który tuneluje do twojego serwera SSH. Wspominasz, że powodem tego jest to, że „połączenie lokalne jest powolne”, ale nie widzę, jak tunelowanie do serwera SSH przyspieszy.

W każdym razie problem polega na tym, że Subversion może łączyć się przez serwer proxy HTTP lub tunel SSH, ale nie ma pojęcia o SOCKS. Musisz więc SOCKSify Subversion, przechwytując wszystkie połączenia TCP i przekierowując je do proxy SOCKS.

Zamiast parafrazować tych, którzy już to robili, wskażę ich szczegółowe wyjaśnienia:

Lub w skrócie głównie wycinany i wklejany ze strony Olivera:

Debian zawiera dwa skarpety, które są również dostępne na sourceforge. Ostatnio zaktualizowany to ProxyChains i jest dość prosty do skonfigurowania. Większość skarpetek działa w podobny sposób, więc te instrukcje powinny być rozsądnym ogólnym przypadkiem. Aby skonfigurować ProxyChains, wystarczy edytować $ (HOME) /. Proxychains / proxychains.conf, aby mieć tylko następujące linie:

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

Wszystko, co musisz wtedy zrobić, to „zawinąć” svn w ProxyChains.

proxychains svn commit

W powyższym przykładzie aplikacja svn nie była mądrzejsza, że ​​jej protokół TCP łączy się z serwerem Subversion, został przekierowany w dół do serwera proxy SOCKS. ”

Jean-Marc Liotier
źródło
Wielkie dzięki, to działa dla mnie. Jeśli korzystasz z systemu OS X i potrzebujesz przekazywania DNS, skorzystaj z tego widelca proxy. github.com/haad/proxychains i upewnij się, że wiersz „proxy_dns” znajduje się w konfiguracji po pierwszym wierszu.
Gourneau,
2

Publikowanie tutaj, ponieważ znalazłem mniej kludge-y sposób na zrobienie tego. Możesz użyć Polipo do korzystania z tunelu SSH SOCKS przez proxy HTTP, dodając następujące wiersze do jego konfiguracji:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipodomyślnie nasłuchuj na porcie 8123. A następnie w $HOME/.subversion/serversutworzyć grupę hostów wywrotowej chcesz sprawdzić się z np jeśli repozytorium Subversion hosta (s) są nazwane proj1.svn.domain.tld, proj2.svn.domain.tlditp, a następnie dodać do następujących [groups]sekcji:

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

Na koniec określ konfigurację proxy dla grupy właśnie dodanych hostów, dodając blok dla grupy:

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

Po tym powinieneś być w stanie normalnie operować na repozytorium, ponieważ pracowałeś bez tunelu SSH.

HTH

Ashish SHUKLA
źródło
Do czego służy „localhost: 8090”?
Deqing
@ Deqing to proxy SOCKS, które jest używane przez polipo jako jego upstream.
Ashish SHUKLA
1

Nie wiem o tunelowaniu, ssh -Dale używaniu czegoś takiego

ssh -L8090:svn.server.com:22 [email protected]

Możesz następnie wykonać tunelowanie, dodając nowy protokół do subversion z konkretnym portem, na którym tunel jest włączony. Tak więc w ~ / .subversion / config dodaj wiersz podobny do

pssh = ssh -p8090

w [tunnels]sekcji, a następnie zamiast svn + ssh: //[email protected] użyj svn + pssh: // użytkownik @ localhost

Jeśli masz istniejącą kopię roboczą, możesz jej użyć

svn switch --relocate svn+ssh://[email protected] svn+pssh://user@localhost

aby zmienić adres, z którym połączona jest kopia robocza bez konieczności dokonywania nowego zamówienia.

blahdiblah
źródło
Nie mogę całkiem złapać. Załóżmy: pierwotnie realizuję transakcje za pomocą: svn co svn: //code.somewhere.com/prj prj A co mogę teraz zrobić? Zasadniczo nie rozumiem, co masz na myśli przez: „zamiast svn + ssh: //[email protected]”. Dzięki
Jeśli masz już kopię roboczą svn co svn+ssh://code.somewhere.com/prj prj, przejście do prj/i uruchomienie svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/zaktualizuje wc, aby wyglądało, jakby zostało svn co svn+pssh://localhost/prj prj
pobrane
Może gdzieś nie rozumiemy. Właściwie chcę sprawdzić kod na serwerze A przez serwer B (ssh -D 8090 użytkownik @ B) na moim komputerze lokalnym, czy jest to wykonalne? svn co svn + pssh: // localhost / prj prj wydaje się po prostu sprawdzić kod na serwerze B, chyba że cię nie dostanę.
Zaktualizowałem, aby rozwiązać ten problem dzięki tunelowaniu ssh, które znam. Jeśli dobrze rozumiem, użycie „ssh -L8090: serverA.com: 22 uż[email protected]”, a następnie „svn co svn + pssh: // użytkownik @ localhost / prj prj” sprawdzi kod z serwera A na twoim maszyna za pośrednictwem serwera B.
blahdiblah
Ach! Chyba rozumiem, gdzie może być zamieszanie. Konfigurowanie tunelu uruchamia powłokę na serwerze proxy, ale nie tutaj zdarzają się polecenia svn. Powinny się one zdarzyć w osobnej powłoce na komputerze. Flaga -f dla ssh może pozwolić na użycie tej samej powłoki.
blahdiblah,
1

Spójrz na domyślne pliki konfiguracyjne na ~ / .subversion / Istnieje wiele użytecznych przykładów skomentowanych. Serwery proxy byłyby konfigurowane w ~ / .subversion / serverach

Gleba
źródło
1

Są sytuacje, gdy na komputerze z systemem Windows wymagane jest połączenie svn + ssh z repozytorium SVN za pośrednictwem serwera proxy skarpet . Ten problem można rozwiązać za pomocą Putty, która zapewnia funkcjonalność SSH i może współpracować z różnymi typami proxy. Proponowane rozwiązanie nie wymaga przekierowania portów lokalnych.

  1. Uruchom kit i utwórz sesję (np. Socks_proxy)
  2. Skonfiguruj TYLKO proxy dla sesji (Połączenie-> Proxy), w którym wymagane jest przesłanie nazwy hosta i portu Proxy . Putty współpracuje z wyborem różnych typów proxy, w tym zarówno SOCKS4, jak i SOCKS5. Opcjonalnie możesz podać nazwę użytkownika i hasło dostępu do serwera proxy.
  3. Zapisz sesję. Pamiętaj, że sesja nie będzie mieć skonfigurowanej nazwy hosta dla połączenia.
  4. Otwórz plik konfiguracyjny SVN Dane aplikacji \ Subversion \ config i zlokalizuj sekcję [tunele]
  5. Umieść dodatkowy opis protokołu SVN poniżej tytułu sekcji: ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy . Właściwie nazwa protokołu jest twoim wyborem, więc możesz wybrać dowolną nazwę, jeśli ssh jest już używany (np. Użyj pssh = zamiast ssh = ).
  6. Skonfiguruj klucz dostępu SSH do serwera docelowego, na którym SSH będzie używany do uruchomienia svnserve . Zaleca się stosowanie korowodu do przechowywania kluczy.
  7. Użyj svn dla dostępu svn + ssh. Nazwę użytkownika należy podać w adresie URL - svn ls svn + nazwa_procesu : // nazwa użytkownika @ serwer / repozytorium, gdzie nazwę protokołu należy zastąpić rzeczywistą nazwą używaną w sekcji [tunele] konfiguracji SVN.

Co to jest - SVN użyje nazwy protokołu do wykrycia, że ​​do połączenia należy użyć pliku plink.exe, a plink użyje nazwy sesji socks_proxy w celu zidentyfikowania obecności proxy. Pamiętaj, że PATH_TO_PLINK należy wprowadzać ukośnikiem, a nie odwrotnym ukośnikiem. Przykład z okazji, gdy plik plink.exe znajduje się w folderze C: \ Program Files \ Putty: ssh = C: / Program Files / Putty / PLINK.EXE -load socks_proxy .


źródło
1

Możesz spróbować tsocks . W tsocks konfigurujesz go tak, aby korzystał z konfiguracji SSH proxy SOCKS, a następnie uruchamiałeś svn w następujący sposób:

tsocks svn co {etc...}
Xorlev
źródło