24 votes

Comment puis-je configurer un proxy pour subversion avec un tunnel ssh?

Je veux vérifier/mettre à jour le code via un proxy car ma connexion locale est lente. J'ai mis en place un tunnel ssh : ssh -D 8090 user@ssh.proxy.net pour rediriger tous les paquets vers mon localhost : 8090.

Comment puis-je configurer subversion pour utiliser cela ?

0 votes

+1, bonne question. Je suis intéressé(e) de voir s'il y a un moyen de faire cela aussi. J'ai un wi-fi très lent et je navigue souvent via un proxy SOCKS configuré de la même manière, ce serait pratique d'avoir subversion (ou autres) utiliser le même.

0 votes

Et le proxy rend votre wi-fi plus rapide?

21voto

Jean-Marc Liotier Points 310

Vous utilisez SSH pour configurer un serveur SOCKS local qui se connecte à votre serveur SSH. Vous mentionnez que votre raison pour le faire est que "la connexion locale est lente" mais je ne vois pas comment se connecter à un serveur SSH le rendra plus rapide.

Quoi qu'il en soit, votre problème est que Subversion peut se connecter via un proxy HTTP ou un tunnel SSH, mais il ne sait rien à propos de SOCKS. Vous devez donc "SOCKSifier" Subversion en capturant toutes ses connexions TCP et en les redirigeant vers le proxy SOCKS.

Au lieu de paraphraser ceux qui l'ont déjà fait, je vous dirigerai vers leurs explications détaillées :

Ou en résumé principalement copié-collé depuis la page d'Oliver :

Debian contient deux "socksifiers" qui sont également disponibles sur sourceforge. Le plus récemment mis à jour est ProxyChains, et il est assez simple à configurer. La plupart des "socksifiers" fonctionnent de manière similaire, donc ces instructions devraient être un cas général raisonnable. Pour configurer ProxyChains, il vous suffit d'éditer $(HOME)/.proxychains/proxychains.conf pour avoir seulement les lignes suivantes :

DynamicChain
tcp_read_time_out 15000
tcp_connect_time_out 10000
[ProxyList]
socks5 127.0.0.1 8090
# NB: pour une raison quelconque 'localhost' ne fonctionne pas dans la ligne ci-dessus

Il vous suffit ensuite de 'wrapper' svn avec ProxyChains.

proxychains svn commit

Dans l'exemple ci-dessus, l'application svn était en quelque sorte ignorante du fait que ses connexions TCP vers le serveur Subversion étaient redirigées via votre proxy SOCKS.

0 votes

Merci beaucoup, cela fonctionne pour moi. Si vous êtes sur OS X et avez besoin de redirection DNS, utilisez cette version forked de proxychain. github.com/haad/proxychains et assurez-vous que la ligne 'proxy_dns' est dans la configuration après la première ligne.

2voto

abbe Points 356

Postez ici, car j'ai trouvé un moyen moins bricolé de le faire. Vous pouvez utiliser Polipo pour utiliser votre tunnel SSH SOCKS via un proxy HTTP, en ajoutant les lignes suivantes à sa configuration :

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipo écoute par défaut sur le port 8123. Ensuite, dans $HOME/.subversion/servers, créez un groupe pour les hôtes de subversion que vous souhaitez extraire, par exemple si vos hôtes de dépôt subversion s'appellent proj1.svn.domain.tld, proj2.svn.domain.tld, etc., puis ajoutez ce qui suit à la section [groups] :

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

Et enfin, spécifiez une configuration de proxy pour le groupe des hôtes que vous venez d'ajouter en ajoutant un bloc pour le groupe :

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

Après cela, vous devriez pouvoir fonctionner normalement sur le dépôt, comme vous le faisiez sans le tunnel SSH.

J'espère que cela vous sera utile

0 votes

Qu'est-ce que "localhost:8090" ?

0 votes

@Deqing c'est le proxy SOCKS utilisé par polipo comme amont.

1voto

blahdiblah Points 179

Je ne connais pas le tunneling avec ssh -D mais en utilisant quelque chose comme

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

Vous pouvez alors créer un tunnel en ajoutant un nouveau protocole à subversion avec le port spécifique sur lequel se trouve le tunnel. Donc, dans ~/.subversion/config ajoutez une ligne comme

pssh = ssh -p8090

dans la section [tunnels] et ensuite au lieu de svn+ssh://user@original.com utilisez svn+pssh://user@localhost

Si vous avez une copie de travail existante, vous pouvez utiliser

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

pour changer l'adresse à laquelle la copie de travail est liée sans avoir à faire un nouveau checkout.

0 votes

Je ne comprends pas tout à fait. Suppose: j'ai initialement fait un checkout avec: svn co svn://code.somewhere.com/prj prj Et que puis-je faire maintenant? Fondamentalement, je ne comprends pas très bien ce que vous voulez dire par: "au lieu de svn+ssh://user@ssh.proxy.net". Merci

0 votes

Si vous avez une copie de travail obtenue avec svn co svn+ssh://code.somewhere.com/prj prj, alors en allant dans prj/ et en exécutant svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/, cela mettra à jour la copie de travail pour qu'elle ressemble à celle obtenue via svn co svn+pssh://localhost/prj prj

0 votes

Peut-être que nous nous trompons quelque part. En fait, je veux vérifier le code sur le serveur A via le serveur B (ssh -D 8090 user@B) sur ma machine locale, est-ce possible? svn co svn+pssh://localhost/prj prj semble simplement vérifier le code sur le serveur B à moins que je ne vous comprenne pas.

1voto

Scottie T Points 4655

Regardez les fichiers de configuration par défaut à ~/.subversion/ Il y a de nombreux exemples utiles commentés. Les proxies seraient configurés dans ~/.subversion/servers

1voto

Il y a des occasions où il est nécessaire sur un PC Windows d'obtenir une connexion svn+ssh au référentiel SVN via un serveur proxy socks. Ce problème peut être résolu avec Putty qui fournit des fonctionnalités SSH et peut fonctionner avec différents types de proxy. La solution proposée ne nécessite pas de redirection de port local.

  1. Lancer Putty et créer une session (par exemple socks_proxy)
  2. Configurer SEULEMENT le proxy pour la session (Connexion->Proxy) où il est nécessaire de saisir le nom d'hôte du proxy et le port. Putty fonctionne avec une sélection de différents types de proxy, y compris SOCKS4 et SOCKS5. Facultativement, vous pouvez fournir un nom d'utilisateur et un mot de passe pour l'accès au proxy.
  3. Enregistrer la session. Veuillez noter que la session n'aura pas de Nom d'hôte configuré pour la connexion.
  4. Ouvrir le fichier de configuration SVN Données d'application\Subversion\config et localiser la section [tunnels]
  5. Ajouter une description de protocole SVN supplémentaire sous le titre de la section : ssh=CHEMIN_VERS_PLINK/PLINK.EXE -load socks_proxy. En fait, le nom du protocole est à votre choix, donc vous pouvez choisir n'importe quel nom si ssh est déjà utilisé (par exemple, utilisez pssh= au lieu de ssh=).
  6. Configurer la clé pour l'accès SSH au serveur cible où SSH sera utilisé pour exécuter svnserve. Il est recommandé d'utiliser pageant pour maintenir les clés.
  7. Utiliser svn pour l'accès svn+ssh. Le nom d'utilisateur doit être passé dans l'URL - svn ls svn+nom du protocole://nom d'utilisateur@serveur/référentiel où le nom du protocole doit être remplacé par le nom réel utilisé dans la section [tunnels] de la configuration SVN.

En fait, SVN utilisera le nom du protocole pour détecter que plink.exe doit être utilisé pour la connexion et plink utilisera le nom de session socks_proxy pour identifier la présence du proxy. N'oubliez pas que CHEMIN_VERS_PLINK doit être saisi avec un slash, pas avec un backslash. Exemple pour l'occasion où plink.exe est situé dans le dossier C:\Program Files\Putty : ssh=C:/Program Files/Putty/PLINK.EXE -load socks_proxy.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X