Como definir proxy para subversão com o túnel ssh?


24

Quero verificar / atualizar o código via proxy, pois minha conexão local é lenta. Eu configurei o túnel ssh: ssh -D 8090 user@ssh.proxy.net para encaminhar todos os pacotes para o meu host local: 8090.

Como posso configurar o subversion para usar isso?

ssh  svn  proxy 

+1, boa pergunta. Estou interessado em ver se há uma maneira de fazer isso também. Eu tenho wi-fi muito lento e frequentemente navego através de um proxy SOCKS configurado da mesma maneira, seria útil ter o subversion (ou outros) usando o mesmo.
Tim Post

E o proxy torna seu wi-fi mais rápido?
innaM

Respostas:


21

Você está usando o SSH para configurar um servidor SOCKS local que faz um túnel para o servidor SSH. Você mencionou que sua razão para fazer isso é que "a conexão local é lenta", mas não vejo como o encapsulamento em um servidor SSH o tornará mais rápido.

Enfim, seu problema é que o Subversion pode se conectar através de um proxy HTTP ou um túnel SSH, mas não tem idéia sobre o SOCKS. Portanto, você precisa do SOCKSify Subversion capturando todos os seus conectores TCP e redirecionando-os para o proxy SOCKS.

Em vez de parafrasear aqueles que fizeram isso antes, vou apontar as explicações detalhadas deles:

Ou, em poucas palavras, principalmente recortadas e cortadas da página de Oliver:

O Debian contém dois socksifiers que também estão disponíveis no sourceforge. O mais recente é o ProxyChains, e é bastante simples de configurar. A maioria dos socksifiers funciona de maneira semelhante, portanto, essas instruções devem ser um caso geral razoável. Para configurar o ProxyChains, basta editar $ (HOME) /. Proxychains / proxychains.conf para ter apenas as seguintes linhas:

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

Tudo o que você precisa fazer é 'wrap' svn no ProxyChains.

proxychains svn commit

No exemplo acima, o aplicativo svn não era o mais sábio de que seu TCP se conecta ao servidor Subversion foi redirecionado para o proxy SOCKS. "


Muito obrigado, isso funciona para mim. Se você estiver no OS X e precisar de encaminhamento de DNS, use este fork do proxychain. github.com/haad/proxychains e verifique se a linha 'proxy_dns' está na configuração após a primeira linha.
precisa

2

Postando aqui, como encontrei uma maneira menos desagradável de fazer isso. Você pode usar o Polipo para usar seu túnel SSH SOCKS sobre proxy HTTP, adicionando as seguintes linhas à sua configuração:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipopor padrão, escute na porta 8123. E então, em $HOME/.subversion/serverscriar um grupo para anfitriões subversão você quiser conferir a partir, por exemplo, se a sua subversão anfitrião repositório (s) são nomeados proj1.svn.domain.tld, proj2.svn.domain.tldetc., em seguida, adicione o seguinte para [groups]a seção:

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

E, finalmente, especifique uma configuração de proxy para o grupo de hosts que você acabou de adicionar, adicionando um bloco ao grupo:

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

Após isso, você poderá operar normalmente no repositório, como costumava trabalhar sem o túnel SSH.

HTH


O que é "localhost: 8090"?
Deqing

@ Deqing é o proxy SOCKS que é usado pelo polipo como seu upstream.
Ashish SHUKLA

1

Eu não sei sobre tunelamento, ssh -Dmas usando algo como

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

Você pode fazer o tunelamento adicionando um novo protocolo ao subversion com a porta específica em que o túnel está. Portanto, em ~ / .subversion / config, adicione uma linha como

pssh = ssh -p8090

na [tunnels]seção e, em vez de svn + ssh: //user@original.com, use svn + pssh: // user @ localhost

Se você já possui uma cópia de trabalho, pode usar

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

para mudar o endereço ao qual a cópia de trabalho está vinculada sem precisar fazer um novo checkout.


Eu não consigo entender direito. Suponha: originalmente fiz o checkout com: svn co svn: //code.somewhere.com/prj prj E o que posso fazer agora? Basicamente, eu realmente não consigo entender o que você quer dizer com: "em vez de svn + ssh: //user@ssh.proxy.net". Obrigado

Se você tem uma cópia de trabalho obtida com svn co svn+ssh://code.somewhere.com/prj prj, em seguida, entrar em prj/e funcionando svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/irá atualizar o wc para olhar como se tivesse sido obtido viasvn co svn+pssh://localhost/prj prj
blahdiblah

Talvez nós entendamos mal em algum lugar. Na verdade, quero verificar o código do servidor A ao servidor B (ssh -D 8090 usuário @ B) na minha máquina local, isso é viável? svn co svn + pssh: // localhost / prj prj parece apenas fazer checkout do código no servidor B, a menos que não esteja recebendo você.

Eu atualizei para resolver isso com o tunelamento ssh que eu conheço. Se bem entendi, usar "ssh -L8090: serverA.com: 22 user@serverB.com" e depois "svn co svn + pssh: // usuário @ localhost / prj prj" verificará o código do servidor A no seu máquina, via servidor B.
blahdiblah 15/04/09

Ah! Acho que vejo onde pode estar a confusão. A configuração do encapsulamento inicia um shell no servidor proxy, mas não é onde os comandos svn estão acontecendo. Isso deve acontecer em um shell separado no seu computador. O sinalizador -f para ssh pode permitir o uso do mesmo shell.
blahdiblah

1

Veja os arquivos de configuração padrão em ~ / .subversion / Existem muitos exemplos úteis comentados. Os proxies seriam configurados em ~ / .subversion / servers


1

Há ocasiões em que é necessário no PC com Windows obter conexão svn + ssh ao repositório SVN através do servidor proxy socks . Esse problema pode ser resolvido com o Putty, que fornece a funcionalidade SSH e pode funcionar com diferentes tipos de proxy. A solução proposta não requer o encaminhamento de porta local.

  1. Inicie o putty e crie uma sessão (por exemplo, socks_proxy)
  2. Configure APENAS o proxy para a sessão (Conexão-> Proxy), na qual é necessário enviar o nome do host e a porta do Proxy . O Putty trabalha com a seleção de diferentes tipos de proxy, incluindo SOCKS4 e SOCKS5. Opcionalmente, você pode fornecer nome de usuário e senha para acesso ao proxy.
  3. Salve a sessão. Lembre-se de que a sessão não terá um Nome de host configurado para conexão.
  4. Abra o arquivo de configuração SVN Application Data \ Subversion \ config e localize a seção [tunnels]
  5. Coloque uma descrição adicional do protocolo SVN abaixo do título da seção: ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy . Na verdade, o nome do protocolo é a sua escolha, assim você pode escolher qualquer nome se o ssh já estiver sendo usado (por exemplo, use pssh = em vez de ssh = ).
  6. Chave de configuração para acesso SSH ao servidor de destino onde o SSH será usado para executar o svnserve . É recomendável usar o concurso para manter as chaves.
  7. Use svn para acessar svn + ssh. O nome do usuário deve ser passado na URL - svn ls svn + protocol_name : // nome_do_usuário @ servidor / repositório em que o nome do protocolo deve ser substituído pelo nome real usado na seção [tunnels] da configuração do SVN.

O que é isso - o SVN usará o nome do protocolo para detectar que o plink.exe deve ser usado para conexão e o plink usará o nome da sessão socks_proxy para identificar que o proxy está presente. Lembre-se de que PATH_TO_PLINK deve ser inserido com barra, não com barra invertida. Exemplo para a ocasião em que o plink.exe está localizado na pasta C: \ Arquivos de Programas \ Putty: ssh = C: / Arquivos de Programas / Putty / PLINK.EXE -load socks_proxy .


1

Você pode tentar os tsocks . Com o tsocks, você o configura para usar as configurações SSH do proxy SOCKS e executa o svn da seguinte forma:

tsocks svn co {etc...}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.