2011-09-13 34 views
2

我有一個使用自己的私鑰/公鑰對部署的Webistrano安裝程序。我想利用簡單的:remote_cache策略,但不想將私鑰複製到部署服務器。webistrano ssh-agent

只要我有這些任務設置:

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任務失敗,錯誤無法解析對庫「主」修訂「[email protected]:基礎/ mms.git」

任何人都可以擺脫任何這光?

回答

2

要回答我的問題,我使出通過cron @reboot從外部啓動ssh-agent和其綁定到一個預先知道的插座和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' 
相關問題