Come posso impostare il proxy per la sovversione con tunnel ssh?


24

Voglio controllare / aggiornare il codice tramite proxy poiché la mia connessione locale è lenta. Ho installato ssh tunnel: ssh -D 8090 user@ssh.proxy.net per inoltrare tutti i pacchetti al mio localhost: 8090.

Come posso impostare Subversion per usare questo?

ssh  svn  proxy 

+1, buona domanda. Sono interessato a vedere se c'è un modo per farlo. Ho una connessione wi-fi molto lenta e spesso navigo tramite un proxy SOCKS impostato allo stesso modo, sarebbe utile che lo stesso subversion (o altri) usasse lo stesso.
Tim Post

E il proxy rende il tuo wi-fi più veloce?
innaM

Risposte:


21

Stai utilizzando SSH per configurare un server SOCKS locale che esegue il tunneling verso il tuo server SSH. Dici che il tuo motivo è che "la connessione locale è lenta" ma non riesco a vedere come il tunneling su un server SSH lo renderà più veloce.

Ad ogni modo, il tuo problema è che Subversion può connettersi attraverso un proxy HTTP o un tunnel SSH, ma non ha idea di SOCKS. Quindi è necessario SOCKSify Subversion acquisendo tutte le sue connessioni TCP e reindirizzandole al proxy SOCKS.

Invece di parafrasare coloro che l'hanno fatto prima, ti indicherò le loro spiegazioni dettagliate:

O in poche parole per lo più tagliato e rovinato dalla pagina di Oliver:

Debian contiene due socksifiers disponibili anche su sourceforge. L'ultimo aggiornato è ProxyChains ed è abbastanza semplice da configurare. La maggior parte dei calzinieri funziona in modo simile, quindi queste istruzioni dovrebbero essere un caso generale ragionevole. Per configurare ProxyChains devi solo modificare $ (HOME) /. Proxychains / proxychains.conf per avere solo le seguenti righe:

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

Tutto quello che devi fare è 'avvolgere' svn in ProxyChains.

proxychains svn commit

Nell'esempio sopra, l'applicazione svn non è stata la più saggia che il suo TCP si connette al server Subversion sia stato reindirizzato verso il basso del proxy SOCKS. "


Grazie mille, questo funziona per me. Se sei su OS X e hai bisogno dell'inoltro DNS, usa questo fork proxychain. github.com/haad/proxychains e assicurarsi che la riga 'proxy_dns' sia nella configurazione dopo la prima riga.
Gourneau,

2

Pubblicando qui, poiché ho trovato un modo meno complicato per farlo. Puoi usare Polipo per usare il tuo tunnel SSH SOCKS su proxy HTTP, aggiungendo le seguenti linee alla sua configurazione:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipoper impostazione predefinita ascolta sulla porta 8123. E poi nel $HOME/.subversion/serverscreare un gruppo per gli host sovversione si desidera controllare da, ad esempio, se il vostro subversion repository ospite (s) sono chiamati proj1.svn.domain.tld, proj2.svn.domain.tlde così via, quindi aggiungere segue alla [groups]sezione:

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

E infine specificare una configurazione proxy per il gruppo di host appena aggiunto aggiungendo un blocco per il gruppo:

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

Dopodiché dovresti essere in grado di operare normalmente sul repository, poiché in passato lavoravi senza tunnel SSH.

HTH


A cosa serve "localhost: 8090"?
Deqing,

@Deqing è il proxy SOCKS utilizzato da polipo come upstream.
Ashish SHUKLA,

1

Non conosco il tunneling ssh -Dma uso qualcosa del genere

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

È quindi possibile eseguire il tunneling aggiungendo un nuovo protocollo alla sovversione con la porta specifica su cui si trova il tunnel. Quindi, in ~ / .subversion / config aggiungi una riga come

pssh = ssh -p8090

nella [tunnels]sezione e poi invece di svn + ssh: //user@original.com usa svn + pssh: // user @ localhost

Se hai una copia di lavoro esistente puoi usare

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

per cambiare l'indirizzo a cui è collegata la copia di lavoro senza dover effettuare un nuovo checkout.


Non riesco proprio a prenderlo. Supponiamo: inizialmente ho verificato con: svn co svn: //code.somewhere.com/prj prj E cosa posso fare ora? Fondamentalmente non riesco davvero a capire cosa intendi con: "invece di svn + ssh: //user@ssh.proxy.net". Grazie

Se si ottiene una copia funzionante svn co svn+ssh://code.somewhere.com/prj prj, andare prj/e funzionare svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/aggiornerà il wc in modo che sembri che sia stato ottenuto tramitesvn co svn+pssh://localhost/prj prj
blahdiblah,

Forse possiamo fraintendere da qualche parte. In realtà voglio controllare il codice dal server A attraverso il server B (ssh -D 8090 utente @ B) sul mio computer locale, è possibile? svn co svn + pssh: // localhost / prj prj sembra solo controllare il codice uno sul server B a meno che non ti stia ottenendo.

Ho aggiornato per risolvere questo problema con il tunneling SSH che conosco. Se ho capito bene, usando "ssh -L8090: serverA.com: 22 user@serverB.com" e poi "svn co svn + pssh: // user @ localhost / prj prj" verificherai il codice dal server A sul tuo macchina, tramite il server B.
blahdiblah,

Ah! Penso di vedere dove potrebbe essere la confusione. L'impostazione del tunnel avvia una shell sul server proxy, ma non è qui che stanno accadendo i comandi svn. Questi dovrebbero accadere in una shell separata sul tuo computer. Il flag -f per ssh potrebbe consentire l'uso della stessa shell.
blahdiblah,

1

Guarda i file di configurazione predefiniti su ~ / .subversion / Ci sono molti esempi utili commentati. I proxy sarebbero impostati in ~ / .subversion / server


1

Ci sono occasioni in cui è necessario sul PC Windows ottenere la connessione svn + ssh al repository SVN tramite il server proxy socks . Questo problema può essere risolto con Putty che fornisce funzionalità SSH e può funzionare con diversi tipi di proxy. La soluzione proposta non richiede il port forwarding locale.

  1. Avvia putty e crea una sessione (ad es. Socks_proxy)
  2. Configurare SOLO proxy per la sessione (Connessione-> Proxy) a cui è richiesto l'invio del nome host e della porta proxy . Putty funziona con la selezione di diversi tipi di proxy inclusi SOCKS4 e SOCKS5. Facoltativamente, è possibile fornire nome utente e password per l'accesso proxy.
  3. Salva la sessione. Ricordare che la sessione non avrà un nome host configurato per la connessione.
  4. Apri il file di configurazione SVN Dati applicazioni \ Subversion \ config e individua la sezione [tunnel]
  5. Inserisci una descrizione aggiuntiva del protocollo SVN sotto il titolo della sezione: ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy . In realtà il nome del protocollo è la tua scelta, quindi puoi scegliere qualsiasi nome se ssh è già usato (ad esempio usa pssh = invece di ssh = ).
  6. Configurare la chiave per l'accesso SSH al server di destinazione in cui SSH verrà utilizzato per eseguire svnserve . Si consiglia di utilizzare lo spettacolo per mantenere le chiavi.
  7. Usa svn per l'accesso svn + ssh. Il nome utente deve essere passato in URL - svn ls svn + nome_protocollo : // nomeutente @ server / repository in cui il nome del protocollo deve essere sostituito con il nome reale utilizzato nella sezione [tunnel] della configurazione SVN.

Che cos'è - SVN utilizzerà il nome del protocollo per rilevare che plink.exe deve essere utilizzato per la connessione e plink utilizzerà il nome della sessione socks_proxy per identificare la presenza del proxy. Ricorda che PATH_TO_PLINK deve essere inserito con barra, non con barra rovesciata. Esempio per occasioni in cui plink.exe si trova nella cartella C: \ Programmi \ Putty: ssh = C: / Programmi / Putty / PLINK.EXE -load socks_proxy .


1

Potresti provare tsocks . Con tsocks, lo si configura per utilizzare le impostazioni SSH del proxy SOCKS, quindi eseguire svn in questo modo:

tsocks svn co {etc...}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.