Wie kann ich einen Proxy für Subversion mit ssh tunnel einstellen?


24

Ich möchte den Code über einen Proxy auschecken / aktualisieren, da meine lokale Verbindung langsam ist. Ich richte ssh tunnel ein: ssh -D 8090 user@ssh.proxy.net um alle Pakete an meinen localhost weiterzuleiten: 8090.

Wie kann ich Subversion einrichten, um dies zu verwenden?

ssh  svn  proxy 

+1, gute Frage. Ich bin gespannt, ob es auch eine Möglichkeit gibt, dies zu tun. Ich habe sehr langsames Wi-Fi und surfe oft über einen SOCKS-Proxy, der auf die gleiche Weise eingerichtet ist. Es wäre praktisch, wenn Subversion (oder andere) das Gleiche verwenden.
Tim Post

Und der Proxy macht Ihr WLAN schneller?
innaM

Antworten:


21

Sie verwenden SSH, um einen lokalen SOCKS-Server einzurichten, der mit Ihrem SSH-Server getunnelt wird. Sie erwähnen, dass Ihr Grund dafür ist, dass "die lokale Verbindung langsam ist", aber ich verstehe nicht, wie das Tunneling zu einem SSH-Server es schneller macht.

Wie auch immer, Ihr Problem ist, dass Subversion eine Verbindung über einen HTTP-Proxy oder einen SSH-Tunnel herstellen kann, aber keine Ahnung von SOCKS hat. Daher müssen Sie SOCKSify Subversion so konfigurieren, dass alle TCP-Verbindungen erfasst und an den SOCKS-Proxy umgeleitet werden.

Anstatt diejenigen zu paraphrasieren, die es zuvor getan haben, verweise ich Sie auf ihre detaillierten Erklärungen:

Oder auf den Punkt gebracht:

Debian enthält zwei Socksifier, die auch bei SourceForge verfügbar sind. Die zuletzt aktualisierte Version ist ProxyChains und lässt sich ganz einfach konfigurieren. Die meisten Socken funktionieren auf ähnliche Weise, daher sollten diese Anweisungen ein vernünftiger allgemeiner Fall sein. Um ProxyChains zu konfigurieren, müssen Sie nur $ (HOME) / .proxychains / proxychains.conf bearbeiten, um nur die folgenden Zeilen zu haben:

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

Alles, was Sie dann tun müssen, ist svn in ProxyChains 'wrappen'.

proxychains svn commit

Im obigen Beispiel war die svn-Anwendung nicht so klug, dass ihre TCP-Verbindung zum Subversion-Server über Ihren SOCKS-Proxy umgeleitet wurde. "


Vielen Dank, das funktioniert für mich. Wenn Sie unter OS X arbeiten und DNS-Weiterleitung benötigen, verwenden Sie diesen Proxychain-Zweig. github.com/haad/proxychains und stellen Sie sicher, dass sich die Zeile 'proxy_dns' in der Konfiguration nach der ersten Zeile befindet.
Gourneau

2

Habe hier gepostet, da ich einen weniger umständlichen Weg gefunden habe, dies zu tun. Sie können Polipo verwenden , um Ihren SSH-SOCKS-Tunnel über HTTP-Proxy zu verwenden, indem Sie der Konfiguration folgende Zeilen hinzufügen:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipoStandardmäßig lauschen Sie auf Port 8123. Und dann in $HOME/.subversion/serverseine Gruppe erstellt für Subversion - Hosts Sie prüfen wollen, zB wenn Ihre Subversion - Repository - Host (s) genannt werden proj1.svn.domain.tld, proj2.svn.domain.tldusw., dann fügen Sie folgenden [groups]Abschnitt:

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

Und schließlich geben Sie eine Proxy-Konfiguration für die Gruppe der Hosts an, die Sie gerade hinzugefügt haben, indem Sie einen Block für die Gruppe hinzufügen:

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

Danach sollten Sie in der Lage sein, das Repository normal zu bearbeiten, wie Sie es früher ohne SSH-Tunnel getan haben.

HTH


Wofür ist "localhost: 8090"?
Deqing

@Deqing es ist der SOCKS-Proxy, der von polipo als Upstream verwendet wird.
Ashish SHUKLA

1

Ich weiß nicht, wie man Tunnel benutzt, ssh -Daber ich benutze so etwas

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

Sie können dann tunneln, indem Sie ein neues Protokoll zu Subversion mit dem bestimmten Port hinzufügen, auf dem der Tunnel ist. Fügen Sie also in ~ / .subversion / config eine Zeile wie folgt hinzu

pssh = ssh -p8090

[tunnels]Verwenden Sie im Abschnitt und dann anstelle von svn + ssh: //user@original.com svn + pssh: // user @ localhost

Wenn Sie eine vorhandene Arbeitskopie haben, können Sie diese verwenden

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

um die Adresse zu ändern, mit der die Arbeitskopie verknüpft ist, ohne dass eine neue Prüfung durchgeführt werden muss.


Ich kann nicht ganz fangen. Angenommen, ich checke ursprünglich mit: svn co svn: //code.somewhere.com/prj prj Und was kann ich jetzt tun? Grundsätzlich kann ich nicht wirklich verstehen, was Sie unter "anstelle von svn + ssh: //user@ssh.proxy.net" verstehen. Vielen Dank

Wenn Sie eine Arbeitskopie bekommen mit svn co svn+ssh://code.somewhere.com/prj prj, dann geht in prj/und läuft svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/das WC zu sehen aktualisieren , als ob es über bekommen hattesvn co svn+pssh://localhost/prj prj
blahdiblah

Vielleicht verstehen wir etwas falsch. Eigentlich möchte ich den Code auf Server A bis Server B (ssh -D 8090 user @ B) auf meinem lokalen Computer auschecken. Ist dies möglich? svn co svn + pssh: // localhost / prj prj scheint nur den Code von Server B zu überprüfen, es sei denn, ich verstehe dich nicht.

Ich habe aktualisiert, um dies mit dem SSH-Tunneling zu beheben, das ich kenne. Wenn ich das richtig verstehe, checkt "ssh -L8090: serverA.com: 22 user@serverB.com" und dann "svn co svn + pssh: // user @ localhost / prj prj" den Code von Server A auf Ihrem Server aus Maschine, über Server B.
blahdiblah

Ah! Ich denke, ich sehe, wo die Verwirrung sein könnte. Durch das Einrichten des Tunnels wird eine Shell auf dem Proxyserver gestartet, aber hier finden die svn-Befehle nicht statt. Diese sollten in einer separaten Shell auf Ihrem Computer stattfinden. Das Flag -f für ssh ermöglicht möglicherweise die Verwendung derselben Shell.
Blahdiblah

1

Schauen Sie sich die Standardkonfigurationsdateien unter ~ / .subversion / an. Es sind viele nützliche Beispiele auskommentiert. Proxies würden in ~ / .subversion / servers eingerichtet


1

Es gibt Fälle, in denen es auf einem Windows- PC erforderlich ist , svn + ssh-Verbindung zum SVN-Repository über den Socks-Proxy-Server herzustellen . Dieses Problem kann mit Putty behoben werden, das SSH-Funktionalität bietet und mit verschiedenen Proxy-Typen arbeiten kann. Die vorgeschlagene Lösung erfordert keine lokale Portweiterleitung.

  1. Starte putty und erstelle eine Session (zB socks_proxy)
  2. Konfigurieren Sie NUR Proxy für die Sitzung (Verbindung-> Proxy), in der Proxy-Hostname und -Port übergeben werden müssen . Putty arbeitet mit der Auswahl verschiedener Proxy-Typen, einschließlich SOCKS4 und SOCKS5. Optional können Sie den Benutzernamen und das Kennwort für den Proxy-Zugriff angeben.
  3. Speichern Sie die Sitzung. Bitte denken Sie daran, dass in der Sitzung kein Hostname für die Verbindung konfiguriert ist .
  4. Öffnen Sie die SVN-Konfigurationsdatei Anwendungsdaten \ Subversion \ config und suchen Sie den Abschnitt [Tunnel].
  5. Fügen Sie eine zusätzliche SVN-Protokollbeschreibung unter dem Abschnittstitel ein: ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy . Eigentlich ist der Protokollname Ihre Wahl, sodass Sie einen beliebigen Namen wählen können, wenn ssh bereits verwendet wird (z. B. verwenden Sie pssh = anstelle von ssh = ).
  6. Konfigurieren Sie den Schlüssel für den SSH-Zugriff auf den Zielserver, auf dem SSH zum Ausführen von svnserve verwendet wird . Es wird empfohlen, einen Festzug zu verwenden, um die Schlüssel zu pflegen.
  7. Verwenden Sie svn für svn + ssh-Zugriff. Der Benutzername sollte in URL übergeben werden - svn ls svn + Protokollname : // Benutzername @ Server / Repository, wobei der Protokollname durch den tatsächlichen Namen ersetzt werden sollte, der im Abschnitt [Tunnel] der SVN-Konfiguration verwendet wird.

Was ist das? SVN verwendet den Protokollnamen, um zu erkennen, dass plink.exe für die Verbindung verwendet werden soll, und plink verwendet den Sitzungsnamen socks_proxy , um zu identifizieren, dass ein Proxy vorhanden ist. Denken Sie daran, dass PATH_TO_PLINK mit einem Schrägstrich und nicht mit einem Backslash eingegeben werden sollte. Beispiel für den Fall, dass sich plink.exe im Ordner C: \ Programme \ Putty befindet: ssh = C: / Programme / Putty / PLINK.EXE -load socks_proxy .


1

Sie könnten es mit Socken versuchen. Mit tsocks konfigurieren Sie es so, dass es die SOCKS-Proxy-SSH-Einstellungen verwendet, und führen dann svn folgendermaßen aus:

tsocks svn co {etc...}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.