2009-11-13 18 views
10

Vorrei accedere (clone/push/pull) a un repository privato (tramite ssh) git dietro un firewall aziendale che consente solo l'accesso proxy http. Ho scritto un robusto programma Java (daemon) (basato sulla libreria di classi JSCh) che mi permetterà di sfruttare il port forwarding locale e remoto e spero di sfruttarlo, ma il mio cervello fa male quando cerco di immaginare come impostare questo .Accesso a un repository git tramite ssh dietro un firewall

Il deposito git repo (per coniare una frase) è al foo.server.com/var/git così l'inclinazione naturale, ignorando la Fireall, di creare un clone potrebbe essere:

$ git clone ssh://foo.server.com/var/git/myrepo.git 

ma il firewall bloccherà questo comando. Sono propenso a provare qualcosa di simile

$ git clone ssh://localhost:8022/var/git/myrepo.git 

dove localhost: 8022 è trasmesso al foo.server.com:22

Così è questo percorso la pena di perseguire? C'è una soluzione più semplice che sia ancora sicura? Ci sono insidie ​​o trucchi di cui dovrei essere a conoscenza?

risposta

5

Si può ottenere una normale sessione ssh (da riga di comando) in corso? Se è così, dovrebbe funzionare anche git.

Quando si utilizza ssh, git dovrebbe raccogliere le opzioni di configurazione in .ssh/config. Se ciò non è sufficiente, è possibile puntare la variabile di ambiente GIT_SSH a una versione modificata di ssh (o wrapper di script della shell).

+2

No. Ecco cosa lo rende così difficile. Solo http è consentita attraverso il firewall. Ci sono hack di configurazione SSH che posso usare per far funzionare i normali comandi ssh ma non credo che questi possano essere d'aiuto con il comando git. Mi piacerebbe sentire che ho torto e lo proverò quando andrò al lavoro. – pajato0

+0

Aggiornato la mia risposta: i vostri hack di configurazione SSH dovrebbero funzionare anche tramite git. – Thilo

+0

In realtà git invoca semplicemente 'git-upload-pack' /' git-receive-pack' quando esegue il recupero/push tramite SSH (fa qualcosa come 'ssh git.example.com" git-upload-pack '/project.git '"'). È possibile specificare dove trovare git-upload-pack o git-receive-pack utilizzando le opzioni appropriate per git-fetch/git-push. –

22

Utilizzando socat e .ssh/config come questo:

Host=foo.server.com 
ProxyCommand=socat - PROXY:your.proxy.ip:%h:%p,proxyport=3128,proxyauth=user:pwd 

si dovrebbe essere in grado di ssh-foo.server.com e

git clone ssh://foo.server.com/var/git/myrepo.git 

dovrebbe lavorare.

+2

Bello, questa è la soluzione finale per questo fastidioso problema. Eccezionale! [Piccolo post su questo] (http://albertgroothedde.com/post/2017-04-fix-ssh-and-git-clone-behind-proxy-on-macos/) – Highmastdon

+0

Grazie Gregor, la tua soluzione ha funzionato! I proxy sono così dolorosi da affrontare. Qualsiasi aiuto è apprezzato! – Anand

Problemi correlati