2

我有一个使用自己的私钥/公钥对部署的 Webistrano 设置。我想利用:remote_cache策略的简单性,但不想将私钥复制到部署服务器。

这么久我已经设置了这些任务:

namespace :ssh do 
  task :start_agent do 
    ssh_options[:forward_agent] = true
    result = `ssh-agent -t 600`
    # Extract env variables
    %w(SSH_AUTH_SOCK SSH_AGENT_PID).each do |key|
      if result =~ /#{key}=(.*?);/
          ENV[key] = $1
      end
    end
    cmd = "ssh-add #{ssh_keys}"
    result = `cmd`
  end 

  task :stop_agent do
    # Kill the agent started previously
    `ssh_agent -k $SSH_AGENT_PID`
  end
end 

before 'deploy', 'ssh:start_agent'

before :deploy似乎工作了一半,但我有几个问题:

  1. 我需要在部署后(以及部署失败后)停止代理。有什么回调我可以挂钩ssh:stop_agent任务吗?
  2. deploy:update_code任务失败并出现错误无法解析存储库 'git@git.eenet.ee:base/mms.git' 上的 'master' 的修订

任何人都可以对此有所了解吗?

4

1 回答 1

2

为了回答我自己的问题,我求助于通过 cron 从外部启动 ssh-agent@reboot并将其绑定到一个预先知道的套接字并将 webistrano 密钥添加到该代理:

@reboot laas sh -c 'eval `ssh-agent -a /path/to/my/ssh-agent.sock`; ssh-add /path/to/webistrano/config/id_rsa'

这样我就可以编写一个简单的 Webistrano 配方,将 ENV 配置为使用该套接字:

ssh_options[:forward_agent] = true
ENV['SSH_AUTH_SOCK'] = '/path/to/my/ssh-agent.sock'
于 2011-09-16T13:36:30.620 回答