2009-11-13 6 views
10

Je voudrais accéder (cloner/pousser/tirer) un dépôt git privé (via ssh) derrière un pare-feu d'entreprise qui n'autorise qu'un accès proxy http. J'ai écrit un robuste programme Java (démon) (basé sur la bibliothèque de classes JSCh) qui me permettra de tirer parti de la redirection de ports locale et distante et j'espère tirer parti de cela, mais mon cerveau me fait mal quand j'essaie d'imaginer .Accéder à un dépôt git via ssh derrière un pare-feu

Le dépôt git (selon une expression) est à foo.server.com/var/git si l'inclination naturelle, en ignorant la fireall, de mettre en place un clone serait:

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

mais le pare-feu bloquera cette commande. Je suis enclin à essayer quelque chose comme

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

où localhost: 8022 est transmis à foo.server.com:22

Alors est-ce chemin mérite d'être poursuivie? Y a-t-il une solution plus simple qui soit toujours sécurisée? Y at-il des pièges ou des pièges dont je devrais être au courant?

Répondre

5

Pouvez-vous lancer une session ssh (en ligne de commande) normale? Si c'est le cas, git devrait également fonctionner. Si vous utilisez ssh, git devrait choisir vos options de configuration dans .ssh/config. Si cela ne suffit pas, vous pouvez pointer la variable d'environnement GIT_SSH sur une version modifiée de ssh (ou wrapper de script shell).

+2

Non. C'est ce qui rend les choses si difficiles. Seul http est autorisé à travers le pare-feu. Il y a des hacks de configuration SSH que je peux utiliser pour obtenir des commandes ssh normales mais je ne crois pas que cela aidera avec la commande git. J'aimerais entendre que j'ai tort et je vais essayer cela quand je vais travailler. – pajato0

+0

Mis à jour ma réponse: vos hacks de configuration SSH devraient également fonctionner via git. – Thilo

+0

En fait, git appelle simplement git-upload-pack'/git-receive-pack' quand il fait fetch/push via SSH (il fait quelque chose comme 'ssh git.example.com" git-upload-pack '/project.git '"'). Vous pouvez spécifier où trouver git-upload-pack ou git-receive-pack en utilisant les options appropriées pour git-fetch/git-push. –

22

En utilisant socat et .ssh/config comme ceci:

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

Vous devriez être en mesure de ssh-foo.server.com et

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

devrait fonctionner.

+2

Nice, c'est la solution finale pour ce problème ennuyeux. Impressionnant! [Petit message à ce sujet] (http://albertgroothedde.com/post/2017-04-fix-ssh-and-git-clone-behind-proxy-on-macos/) – Highmastdon

+0

Merci Gregor, votre solution a fonctionné! Les proxies sont une douleur à traiter. Toute aide est appréciée! – Anand

Questions connexes