¿Cómo puedo configurar el proxy para subversion con el túnel ssh?

24

Quiero verificar / actualizar el código a través del proxy ya que mi conexión local es lenta. Configuré el túnel ssh: ssh -D 8090 [email protected] para reenviar todos los paquetes a mi host local: 8090.

¿Cómo puedo configurar subversion para usar esto?


fuente
+1, buena pregunta. Estoy interesado en ver si hay una manera de hacer esto también. Tengo wi-fi muy lento y, a menudo, navego a través de un proxy SOCKS configurado de la misma manera, sería útil que Subversion (u otros) usen lo mismo.
Tim Post
¿Y el proxy hace que su wi-fi sea más rápido?
INNAM

Respuestas:

21

Está utilizando SSH para configurar un servidor SOCKS local que haga un túnel hacia su servidor SSH. Usted menciona que su razón para hacerlo es que "la conexión local es lenta", pero no veo cómo hacer un túnel a un servidor SSH lo hará más rápido.

De todos modos, su problema es que Subversion puede conectarse a través de un proxy HTTP o un túnel SSH, pero no tiene idea de SOCKS. Por lo tanto, necesita SOCKSify Subversion capturando todas sus conexiones TCP y redirigiéndolas al proxy SOCKS.

En lugar de parafrasear a los que lo han hecho antes, te señalaré sus explicaciones detalladas:

O, en pocas palabras, principalmente cortado y pegado de la página de Oliver:

Debian contiene dos calcetines que también están disponibles en sourceforge. El más reciente actualizado es ProxyChains, y es bastante sencillo de configurar. La mayoría de los calcetines funcionan de manera similar, por lo que estas instrucciones deben ser un caso general razonable. Para configurar ProxyChains solo necesita editar $ (HOME) /. Proxychains / proxychains.conf para tener solo las siguientes líneas:

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

Todo lo que necesita hacer es 'envolver' svn en ProxyChains.

proxychains svn commit

En el ejemplo anterior, la aplicación svn no era más sabia de que su TCP se conecta al servidor Subversion se redirigió a través de su proxy SOCKS ".

Jean-Marc Liotier
fuente
Muchas gracias, esto funciona para mí. Si está en OS X y necesita reenvío de DNS, use esta bifurcación de proxychain. github.com/haad/proxychains y asegúrese de que la línea 'proxy_dns' esté en la configuración después de la primera línea.
Gourneau
2

Publicando aquí, ya que encontré una manera menos difícil de hacer esto. Puede usar Polipo para usar su túnel SSH SOCKS sobre proxy HTTP, agregando las siguientes líneas a su configuración:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipopor defecto escucha en el puerto 8123. Y luego, en $HOME/.subversion/serverscrear un grupo de anfitriones de subversión que desee comprobar hacia fuera de, por ejemplo, si su subversión repositorio central (s) se nombran proj1.svn.domain.tld, proj2.svn.domain.tld, etc, a continuación, añadir después a [groups]la sección:

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

Y finalmente especifique una configuración de proxy para el grupo de hosts que acaba de agregar agregando un bloque para el grupo:

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

Después de esto, debería poder operar en el repositorio normalmente, como solía trabajar sin túnel SSH.

HTH

Ashish SHUKLA
fuente
¿Para qué sirve "localhost: 8090"?
Deqing
@Deqing es el proxy SOCKS que usa polipo como su cadena de entrada.
Ashish SHUKLA
1

No sé sobre hacer túneles ssh -Dpero usar algo como

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

Luego puede hacer un túnel agregando un nuevo protocolo a subversion con el puerto particular en el que se encuentra el túnel. Entonces, en ~ / .subversion / config agregue una línea como

pssh = ssh -p8090

en la [tunnels]sección y luego en lugar de svn + ssh: //[email protected] use svn + pssh: // user @ localhost

Si tiene una copia de trabajo existente, puede usar

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

para cambiar la dirección a la que está vinculada la copia de trabajo sin tener que hacer un nuevo pago.

blahdiblah
fuente
No puedo entenderlo. Supongamos que originalmente pagué con: svn co svn: //code.somewhere.com/prj prj ¿Y qué puedo hacer ahora? Básicamente no puedo entender qué quieres decir con: "en lugar de svn + ssh: //[email protected]". Gracias
Si tiene una copia de trabajo obtenida svn co svn+ssh://code.somewhere.com/prj prj, al entrar prj/y ejecutar svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/se actualizará el wc para que parezca que se ha obtenido a través desvn co svn+pssh://localhost/prj prj
blahdiblah
Tal vez no entendemos bien en alguna parte. En realidad, quiero verificar el código en el servidor A a través del servidor B (ssh -D 8090 user @ B) a mi máquina local, ¿es esto factible? svn co svn + pssh: // localhost / prj prj parece simplemente verificar el código uno del servidor B a menos que no te esté obteniendo.
He actualizado para abordar esto con el túnel ssh que conozco. Si entiendo correctamente, usando "ssh -L8090: serverA.com: 22 [email protected]" y luego "svn co svn + pssh: // user @ localhost / prj prj" verificará el código del servidor A en su máquina, a través del servidor B.
blahdiblah
Ah! Creo que veo dónde podría estar la confusión. La configuración del túnel inicia un shell en el servidor proxy, pero aquí no es donde están sucediendo los comandos svn. Eso debería suceder en un shell separado en su computadora. El indicador -f para ssh podría permitir el uso del mismo shell.
blahdiblah
1

Mire los archivos de configuración predeterminados en ~ / .subversion / Hay muchos ejemplos útiles comentados. Los proxies se configurarían en ~ / .subversion / Server

Gleb
fuente
1

Hay ocasiones en que se requiere en una PC con Windows para obtener una conexión svn + ssh al repositorio SVN a través del servidor proxy de calcetines . Este problema se puede resolver con Putty, que proporciona la funcionalidad SSH y puede funcionar con diferentes tipos de proxy. La solución propuesta no requiere reenvío de puerto local.

  1. Inicie putty y cree una sesión (por ejemplo, socks_proxy)
  2. Configure SOLO el proxy para la sesión (Conexión-> Proxy) donde se requiere enviar el nombre de host y el puerto del proxy . Putty funciona con la selección de diferentes tipos de proxy, incluidos SOCKS4 y SOCKS5. Opcionalmente, puede proporcionar el nombre de usuario y la contraseña para el acceso de proxy.
  3. Guarda la sesión. Recuerde que la sesión no tendrá un Nombre de host configurado para la conexión.
  4. Abra el archivo de configuración SVN Application Data \ Subversion \ config y ubique la sección [túneles]
  5. Ponga una descripción adicional del protocolo SVN debajo del título de la sección: ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy . En realidad, el nombre del protocolo es su elección, por lo que puede elegir cualquier nombre si ya se usa ssh (por ejemplo, use pssh = en lugar de ssh = ).
  6. Configure la clave para el acceso SSH al servidor de destino donde se utilizará SSH para ejecutar svnserve . Se recomienda usar el concurso para mantener las claves.
  7. Use svn para acceso svn + ssh. El nombre de usuario debe pasarse en la URL: svn ls svn + nombre_protocolo : // nombredeusuario @ servidor / repositorio donde el nombre del protocolo debe sustituirse por el nombre real utilizado en la sección [túneles] de la configuración SVN.

Qué es: SVN usará el nombre del protocolo para detectar que plink.exe debe usarse para la conexión y plink usará el nombre de sesión socks_proxy para identificar que el proxy está presente. Recuerde que PATH_TO_PLINK debe ingresarse con barra diagonal, no con barra diagonal inversa. Ejemplo para ocasiones cuando plink.exe se encuentra en la carpeta C: \ Archivos de programa \ Putty: ssh = C: / Archivos de programa / Putty / PLINK.EXE -load socks_proxy .


fuente
1

Puedes probar tsocks . Con tsocks, lo configura para usar el proxy SOCKS que configura SSH y luego ejecuta svn de esta manera:

tsocks svn co {etc...}
Xorlev
fuente