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. リポジトリ 'git@git.eenet.ee:base/mms.git' の 'master' のリビジョンを解決できませんというエラーdeploy:update_codeでタスクが失敗します

誰でもこれに光を当てることができますか?

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'

そのため、そのソケットを使用するように ENV を構成する簡単な Webistrano レシピを作成できます。

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