【问题标题】:Git clone through a reverse tunnel通过反向隧道进行 Git 克隆
【发布时间】:2015-07-05 03:39:17
【问题描述】:

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

【问题讨论】:

    标签: git ssh


    【解决方案1】:

    原则上,你可以这样做

    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 config 中的 URL 更清晰。)

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

    【讨论】:

    • 遗憾的是,它在生成消息“在 中初始化空的 Git 存储库”后挂起,即使是最小的存储库也是如此。我可以看到通过 Wireshark 来回通过 SSH 进行通信。有什么想法吗?
    • 您提到了其他协议;请您指出其他方法可以做到这一点吗?
    • 你的 Windows 机器上有 SSH 服务器吗?
    • 关于其他类型的 git URL,见kernel.org/pub/software/scm/git/docs/git-clone.html#URLS。不过,大多数人需要在你的 Windows 机器上启动某种类型的服务器。
    • 啊,调试远程隧道,而不是 git clone 首先尝试ssh user@localhost:2222 登录到你的 Windows 机器。这行得通吗?
    【解决方案2】:

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

    在网络服务器上设置一个仓库:

    cd /somedir
    git init --bare
    

    从您的开发机器推送到该存储库:

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

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

    即在您的开发机器上:

    git push web master:master-from-dev
    

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

    git merge master-from-dev
    

    【讨论】:

      【解决方案3】:

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

      有很多优点:

      • 您不必暴露您的私人机器
      • 您可以在多台机器上工作(例如您的笔记本电脑和台式机),每台机器都有一个您的裸仓库的克隆
      • 您甚至可以在您的服务器上制作补丁,推送到裸存储库,然后将它们拉到您的工作机器上。

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

      【讨论】:

        【解决方案4】:

        我自己没有尝试过这个(并且不能说它与 NAT 的处理效果如何),但听起来DynDNS 可能是解决您问题的一种方法。它为您的家用机器提供了一个公共 URL,甚至可以自动更新。来自他们的support page

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

        当然,因为这也会让其他人更容易访问您的计算机,所以您还应该采取适当的安全措施。但是,如果它有效,您可以通过 DynDNS URL SSH 进入您的家庭计算机。

        【讨论】:

        • 谢谢,克里斯 (+1)。我还没有尝试过这个解决方案。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2018-11-16
          • 2016-11-20
          • 2012-03-01
          • 2020-12-21
          • 2014-12-06
          • 2014-02-26
          • 1970-01-01
          • 2018-12-28
          • 1970-01-01
          相关资源
          最近更新 更多