代码之家  ›  专栏  ›  技术社区  ›  James A. Rosen

有没有可能让capistrano通过反向ssh隧道进行签出?

  •  10
  • James A. Rosen  · 技术社区  · 14 年前

    我正在开发一个驻留在公共主机上的应用程序,但其源代码必须保存在公司防火墙后面的git存储库中。我得到 非常 厌倦了部署VIA的缓慢 scp (复制整个存储库并在每次部署时通过ssh将其传送)并希望远程主机只需执行 git pull 更新。问题是防火墙禁止传入ssh连接。

    我是否可以设置一个从我的计算机到部署计算机的ssh隧道,并使用我的存储库作为 GIT拉力 ?毕竟, git 是分布式的,所以我的副本和中心存储库一样有效。如果可能,tunnel命令和capistrano配置是什么?

    我想隧道看起来会像

    ssh -R something:deployserver.com:something deploybot@deployserver.com
    
    2 回复  |  直到 9 年前
        1
  •  7
  •   Tate Johnson    14 年前

    net:ssh implements remote forwarding . 我查看了Capistrano的所有源代码,在当前版本中看不到对它的任何引用。同样,这不会阻止您在使用Capistrano部署之前建立远程转发。

    你要做的是设置 :local_repository :repository 单独的路径。 :本地存储库 在本地引用,以确定在启动连接之前将用于部署的提交。那叶子 储存库 使远程服务器在连接启动后退出。在这里您可以指定防火墙后面存储库的路径。

    # deploy.rb
    set :local_repository, "ssh://git@serverbehindfirewall/path/to/project.git"
    set :repository,  "ssh://git@localhost:9000/path/to/project.git"
    

    在部署之前,请确保建立远程转发。您需要对部署到的每个服务器重复此操作。

    $ ssh -R 9000:serverbehindfirewall:22 deploybot@deployserver.com
    # CTRL + C + A (Screen) or ⌘ + T (Terminal.app) to open new tab
    $ cap HOSTFILTER=deployserver.com deploy # HOSTFILTER reduces set to specified host. Only useful if you have multiple servers.
    

    使用net::ssh,这可以很容易地转变成一个任务,在部署到多个服务器时,它比任何其他任务都更具灵活性。

    最后,考虑到您一直在使用scp,您可能需要设置 deploy_via, :remote_cache 它将存储库的副本保存在远程服务器上。这大大减少了部署时间,减少了损坏的机会。

        2
  •  1
  •   Community nesinervink    7 年前

    看我的回答 this SO question :

    使用Capistrano3.x,以下对我有效:

    namespace :deploy do
      desc "Open SSH Tunnel to GitLab"
      task :open_tunnel do
        on roles(:app) do
          info "Opening SSH Remote Tunnel..."
          self.send(:with_ssh) do |ssh|
            # ssh -R 9000:192.168.1.123:22
            ssh.forward.remote(22, "192.168.1.123", 9000)
          end
        end
      end
      before "deploy:check", "deploy:open_tunnel"
    end
    

    请注意 ssh.forward.remote 期望参数的顺序与 ssh -R ,以上相当于 ssh -R 9000:192.168.1.123:22

    此任务调用私有方法,如果有人知道获取access capistrano的ssh连接的官方方法,请评论或编辑。

    编辑: 另见本节 Tunneling and other related SSH themes sshkit的自述文件