【发布时间】:2012-12-26 01:46:40
【问题描述】:
我们正在使用 Capistrano 自动将 PHP 应用程序的新版本推送到生产服务器。生产服务器(我们称之为生产)是公共的,而我们的存储库服务器(我们称之为 repo)与我们自己的机器一起位于我们公司的防火墙后面。
默认配置的 Capistrano 无法工作,因为生产无法与 repo 通信。
我想知道是否有某种方法可以先将 capistrano 设置为 SSH 以进行 repo,然后 SSH 到生产在端口上打开一个隧道,然后我可以使用 SSH 从生产返回 repo 以从 SCM 中提取更改。
我只是不知道如何设置或找出更好的解决方案。想法?
编辑:
我试过了:
role :web, "deploy.com"
namespace :deploy do
task :remote_tunnel do
run 'Creating SSH tunnel...' do |channel, stream, data|
ssh = channel.connection
ssh.forward.remote(22, 'server.com', 10000, '127.0.0.1')
ssh.loop {!ssh.forward.active_remotes.include?([10000, '127.0.0.1'])}
end
end
end
before "deploy:update_code", "deploy:remote_tunnel"
但我不断收到此错误:
failed: "sh -c 'Creating SSH tunnel...'" on deploy.com
【问题讨论】:
-
看来您需要使用 SSH 设置远程端口转发 debianadmin.com/…
-
是的,但是如何在 Capistrano 脚本中做到这一点?它似乎忽略了我的本地 .ssh/config...
标签: ruby ssh capistrano firewall ssh-tunnel