2011-09-13 2 views
2

J'ai une configuration Webistrano qui se déploie avec sa propre paire de clés privée/publique. Je voudrais exploiter la simplicité de la stratégie :remote_cache, mais je ne veux pas copier la clé privée sur le serveur de déploiement.webistrano ssh-agent

Tant je ces tâches mises en place:

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' 

Ce before :deploy semble fonctionner à mi-chemin, mais j'ai quelques problèmes:

  1. Je dois arrêter l'agent après Deploy (et après un échec de déploiement). Y at-il un rappel que je peux accrocher la tâche ssh:stop_agent?
  2. La tâche deploy:update_code échoue avec l'erreur Impossible de résoudre la révision de « maître » sur dépôt « [email protected]: base/mms.git »

Quelqu'un peut-il nous éclairer à ce sujet?

Répondre

2

Pour répondre à ma propre question, j'ai eu recours à commencer à l'extérieur ssh-agent via Cron @reboot et le lier à une prise de pré connue et ajouter Webistrano clé à cet agent:

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

Alors que je peux écrire une recette Webistrano simple qui configure ENV pour utiliser cette socket:

ssh_options[:forward_agent] = true 
ENV['SSH_AUTH_SOCK'] = '/path/to/my/ssh-agent.sock'