Capistrano, zapory ogniowe i tunel

Używamy Capistrano do automatyzacji przesuwania nowych wersji aplikacji PHP na serwer produkcyjny. Serwer produkcyjny (nazwijmy go produkcją) jest publiczny, podczas gdy nasz serwer repozytorium (nazwijmy go repo) znajduje się za naszą korporacyjną zaporą, wraz z naszymi własnymi maszynami.

Capistrano, domyślnie skonfigurowany, nie będzie działać, ponieważ produkcja nie może rozmawiać z repo.

Zastanawiałem się, czy w jakiś sposób mogłem ustawić capistrano na SSH na repo, a następnie SSH na produkcję, otwierając tunel na porcie, którego mogę następnie użyć do SSH z produkcji z powrotem do repo, aby pobrać zmiany z SCM.

Po prostu nie wiem, jak to skonfigurować lub znaleźć lepsze rozwiązanie. Pomysły?

Edytować:

Próbowałem tego:

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"

Ale ciągle otrzymuję ten błąd:

failed: "sh -c 'Creating SSH tunnel...'" on deploy.com

questionAnswers(2)

yourAnswerToTheQuestion