вебистрано ssh-agent - PullRequest
       19

вебистрано ssh-agent

2 голосов
/ 13 сентября 2011

У меня есть настройка 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? 1011 *
  2. Задача deploy:update_code завершается с ошибкой Невозможно разрешить ревизию для 'master' в хранилище 'git@git.eenet.ee: base / mms.git'

Кто-нибудь может пролить свет на это?

1 Ответ

2 голосов
/ 16 сентября 2011

Чтобы ответить на мой собственный вопрос, я прибег к внешнему запуску ssh-agent через cron @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'
...