Git克隆通过反向隧道

时间:2011-06-08 19:15:52

标签: git ssh

我的机器上有我的Git仓库,它在家里没有自己的公共IP;我想在我的Web服务器上克隆这个repo。反向隧道允许我从我的机器拉到服务器是否正确?我要发出什么命令来执行克隆?我的本地机器运行Windows;服务器运行Ubuntu。

5 个答案:

答案 0 :(得分:15)

原则上,您可以执行类似

的操作
ssh -R 2222:localhost:22  username@webserver.com 

然后在您的网络服务器上使用

git clone ssh://user@localhost:2222/path/to/repo.git/

但这会加密你的数据两次。

或者,您可以使用git支持的任何其他协议,并为这些协议转发正确的端口。

您也可以将这样的部分放入〜/ .ssh / config:

Host my-server
HostName localhost
ForwardX11 no
Port 2222

然后你可以使用这个克隆命令: git clone git@my-server:mytools/projectName.git。 (这允许您将服务器的密钥存储为不属于localhost,并使您的git配置中的URL更清晰。)

对于您的服务器(隧道服务器和最终主机),您通常需要对每个公钥授权进行身份验证,为此,您应该将私钥(例如id_rsa)放在〜/ .ssh目录中。 (那里的所有文件,特别是私钥,只能为您的用户读取,并且目录只能为您的用户编写。)
所有这些并不是特定于隧道,而是通用SSH的东西。

答案 1 :(得分:5)

您可以将更改推送到Web服务器,而不是尝试提取它们:

在网络服务器上设置存储库:

cd /somedir
git init --bare

从您的开发机器推送到该回购站:

git remote add web user@web:/somedir
git push web master 

如果您想要推送到非裸存储库(例如,如果您的网络应用程序在结账时运行),那么您将需要推送到当前未检出的分支,然后合并。

即。在您的开发机器上:

git push web master:master-from-dev

然后登录到网络机器并执行:

git merge master-from-dev

答案 2 :(得分:1)

我自己没有尝试过(并且不能说它处理NAT的程度如何),但听起来DynDNS可能是解决问题的方法之一。它为您的家庭计算机提供了一个公共URL,甚至可以自动更新。来自support page

  

免费Dynamic DNS   服务提供了一个易于记忆   用于快速远程访问您的URL的URL   网络。这可以让你达到   家庭服务,如个人服务   网站,安全摄像头,VPN,游戏   服务器等等,使用简单的网络   地址就像   http://myhome.dyndns.org/,而不是   一个毫无意义,不断变化的知识产权   地址如http://123.45.67.89。您   可以learn more about how Dynamic DNS works here

当然,因为这样可以让其他人更容易访问您的计算机,所以您也应该采取适当的安全措施。但是,如果它可以工作,你可以通过DynDNS URL直接进入你的家用机器。

答案 3 :(得分:1)

另一种方法是在服务器上设置裸存储库,然后从本地计算机上推送它。从那里拉到你服务器的存储库。

有许多优点:

  • 您不必公开您的私人计算机
  • 您可以在多台计算机上工作(例如您的笔记本电脑和桌面计算机),每台计算机都可以使用您的裸仓库进行克隆
  • 您甚至可以在服务器上制作补丁,推送到裸机库,然后将它们拉到您的工作机器上。

有关详细说明,请参阅http://joemaller.com/990/a-web-focused-git-workflow/

答案 4 :(得分:-2)

您可以在防火墙上打开ssh端口,并在路由器上设置路由以命中您的计算机。您只需要路由器公开的IP。