2013-06-15 3 views
8

Ho un server Git dietro un firewall. Posso accedere al firewall da casa mia, ma non dal server git. Tuttavia, posso accedere al server Git dal firewall (cioè, posso SSH al firewall e quindi SSH dal firewall al server git). Sto cercando di spingere e tirare i repository git dalla mia macchina domestica, e ho pensato che SSH ProxyCommand lo avrebbe fatto. Così ho aggiunto il seguente al mio file di configurazione SSH:Git, SSH e ProxyCommand

Host git_server 
HostName git_server.dom 
User user_git_server 
IdentityFile ~/.ssh/id_rsa 
ProxyCommand ssh firewall exec nc %h %p 

Host firewall 
HostName firewall.dom 
User user_firewall 
IdentityFile ~/.ssh/id_rsa 

Con questa impostazione, posso direttamente SSH al server git facendo ssh git_server. Tuttavia, i comandi git che devono comunicare con il server non funzionano. git remote show origin fallisce con il messaggio:

ssh: connect to host git_server.dom port 22: Operation timed out 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights and the repository exists. 

l'URL del pronti contro termine è all'origine

ssh://[email protected]_server.dom/path/to/bare/repository/repo.git 

penso di avere la maggior parte delle cose a posto, ma manca un piccolo pezzo cruciale. Qualche suggerimento su cosa potrei fare male?

risposta

3
ssh://[email protected]_server.dom/path/to/bare/repository/repo.git 
         ^^^^^^^^^^^^^^ 

Si utilizza l'URL sbagliato per il repository. Poiché il file di configurazione ssh ha una voce host per git_server, è necessario utilizzare tale nome host anche nell'URL del repository, altrimenti SSH non utilizzerà un ProxyCommand.

la correttezza URL deve essere sia

ssh://[email protected]_server/path/to/bare/repository/repo.git 

o semplicemente

[email protected]_server:/path/to/bare/repository/repo.git 
+2

No, che potrebbe funzionare anche. È un [ssh-uri] (http://stackoverflow.com/a/9835653/6309), cioè una sintassi non [scp] (http://stackoverflow.com/a/14134674/6309) che wouldn ' t usare il file '~/.ssh/config'. E se dovessi usare la [sintassi di scp] (http://www.hypexr.org/linux_scp_help.php) come suggerito, non avresti bisogno di specificare il nome utente: 'ssh: // git_server:/path/a/nudo/repository/repo.git'. E tu intendevi ['due punti'] (http://en.wikipedia.org/wiki/Colon_%28punctuation%29), non "colore";) – VonC

+0

Non sono sicuro di cosa esattamente ti abbia fatto dire "No" ". Quando un ssh-uri NON userà il file ssh-config? – innaM

+0

Ah. Testato questo e il colon deve andare. – innaM

1

È possibile, come indicato in "Git clone from remote ssh repository - change the machine on the remote network before executing the clone command", che non si disponga del comando netcat sul server proxy.

Hai anche another solution with socat, che negozierà con il server proxy HTTP (S) utilizzando il metodo CONNECT per ottenere una pipe pulita sul server sul lato opposto. Vedi socat.

host gh 
    user git 
    hostname github.com 
    port 22 
    proxycommand socat - PROXY:your.proxy.ip:%h:%p,proxyport=3128,proxyauth=user:pwd 

Ora si può solo dire (per esempio):

git clone gh:sitaramc/git-notes.git