2011-06-08 18 views
13

Tengo mi repositorio de Git en mi máquina, que no tiene IP pública propia, en casa; Quiero clonar este repositorio en mi servidor web. ¿Es correcto que un túnel inverso me permita tirar de mi máquina al servidor? ¿Qué comando (s) doy para realizar el clon? Mi máquina local ejecuta Windows; el servidor ejecuta Ubuntu.Clon de Git a través de un túnel inverso

Respuesta

13

En principio, se puede hacer algo como

ssh -R 2222:localhost:22 [email protected] 

y luego utilizar en su servidor web

git clone ssh://[email protected]:2222/path/to/repo.git/ 

Esto cifrar los datos dos veces, sin embargo.

Como alternativa, puede utilizar cualquiera de los otros protocolos que admite git, y reenviar los puertos correctos para estos.

También se puede poner una sección como esta en ~/.ssh/config:

Host my-server 
HostName localhost 
ForwardX11 no 
Port 2222 

continuación, puede utilizar este comando clon: git clone [email protected]:mytools/projectName.git. (Esto le permite almacenar la clave del servidor no como perteneciente a localhost, y hace que la URL en su configuración de git sea más clara.)

Para su servidor (tanto el servidor de túnel como el host final) generalmente quiere autenticarse por público -key autorización, para esto debes poner la clave privada (ej. id_rsa) en tu directorio ~/.ssh. (Y todos los archivos allí, específicamente la clave privada, deben ser legibles solo para su usuario, y el directorio solo para su usuario).
Todo esto no es específico para el túnel, sino cosas genéricas de SSH.

+0

Lamentablemente, se cuelga después de producir el mensaje "Repositorio de Git vacío inicializado en ", incluso con el más pequeño de los repositorios. Puedo ver que la comunicación avanza sobre SSH hacia atrás y hacia delante a través de Wireshark. ¿Alguna idea a alguien? – Brian

+0

Usted mencionó los otros protocolos; ¿Podría indicarme otras formas de hacer esto? – Brian

+0

¿Tiene un servidor SSH en su máquina con Windows? –

-2

Puede abrir el puerto ssh en su cortafuegos y configurar el enrutamiento en su enrutador para golpear su máquina. Solo necesitarás la IP que expone tu enrutador.

1

No he probado esto por mi cuenta (y no puedo decir lo bien que trata con NAT), pero parece que DynDNS podría ser una solución a su problema. Proporciona una URL pública a su máquina doméstica que incluso puede actualizarse automáticamente. Desde su support page:

La libre Dynamic DNS servicio proporciona una manera fácil de recordar URL para el acceso remoto a la red rápida . Esto le permite llegar a servicios en el hogar, tales como un web, cámaras de seguridad, VPN, juego servidor, y más, usando un simple dirección web como http://myhome.dyndns.org/, en lugar de un sentido, siempre cambiante IP dirección como http://123.45.67.89. Usted puede learn more about how Dynamic DNS works here.

Por supuesto, debido a que esto facilitará el acceso de otras personas a su computadora, también debe tomar las medidas de seguridad apropiadas. Sin embargo, si funciona, puede ingresar a su máquina doméstica a través de la URL DynDNS.

+0

Gracias, Chris (+1). Todavía tengo que probar esta solución. – Brian

3

Se podría empujar los cambios en el servidor web, en lugar de tratar de tirar de ellos:

Establecer un repos en el servidor web:

cd /somedir 
git init --bare 

Pulsar para que las cesiones temporales de su máquina dev:

git remote add web [email protected]:/somedir 
git push web master 

Si usted quiere empujar a un repos no desnudos (por ejemplo, si su aplicación web se ejecuta en un check out), entonces usted tendrá que empujar a una rama que no está marcada actualmente fuera y luego se fusionan en

es decir, en su máquina dev:.

git push web master:master-from-dev 

inicie la sesión en la máquina web y hacer:

git merge master-from-dev 
0

Otra alternativa es la creación de un repositorio desnudo en su servidor, y empujar a él desde su máquina local. Ingresa desde allí en el repositorio de tu servidor.

Hay muchas ventajas:

  • que no tiene que exponer su máquina privada
  • se puede trabajar desde múltiples máquinas (por ejemplo, su ordenador portátil y el escritorio), cada uno de los cuales tiene un clon de su informe vacío
  • incluso puede hacer parches en su servidor, presionar al repositorio desnudo, y tirar de ellos en su máquina en funcionamiento.

Ver http://joemaller.com/990/a-web-focused-git-workflow/ para una buena descripción.

Cuestiones relacionadas