Capistrano使用不同的身份validation方法部署到不同的服务器

我需要部署到2个不同的服务器,这两个服务器有不同的身份validation方法(一个是我的大学的服务器,另一个是AWS的amazon web services器)

我已经为我的大学的服务器运行了capistrano,但我不知道如何将部署添加到AWS,因为对于这个,我需要为用户.pem文件添加ssh选项,例如:

ssh_options[:keys] = [File.join(ENV["HOME"], ".ssh", "test.pem")] ssh_options[:forward_agent] = true 

我已经浏览了starckoverflow,没有提及如何处理这个和这个不同的身份validation方法

我发现了一篇文章 ,讲述了两个不同的密钥,但是这个引用了一个服务器和一个git,它们都使用不同的pem文件。 不是这种情况。

我到了这个教程 ,但找不到我需要的。

我不知道这是否与我所要求的相关:我正在使用ruby 1.9.2p290和rails 3.0.10的Rails应用程序,我正在使用svn存储库

请任何帮助欢迎。 非常感谢

这最好通过ssh-configs而不是Capistrano直接处理。 无论如何,这很容易。 技巧是保罗在Stackoverflow上的答案 。 你会build立你的~/.ssh/config文件来为你正在寻找的主机提供所需的参数。 令人高兴的是,这个configuration文件可以接受通配符,从而更容易区分AWS和Univ机器。

 Host *.univ.edu IdentityFile ~/.ssh/id_rsa Host [aws things] IdentityFIle ~/.ssh/aws.pem ForwardAgent Yes 

IdentityFile指令告诉SSH使用哪个SSH密钥,这是你如何告诉它select正确的一个取决于你要去的地方。 ForwardAgent等同于您提到的Capistrano指令。

我使用capistrano-ext扩展的多级来做这件事。

  gem install capistrano-ext 

我在config/deploy/创build了几个不同的阶段 ,每个阶段都有自己的capistrano设置。

 lunix@madeira] (master) -> cat config/deploy/foo.rb set :user, 'ubuntu' ssh_options[:keys] = File.expand_path('~/.ssh/awsfoo.pem') server 'foo-01.example.com', :foo 

 lunix@madeira] (master) -> cat config/deploy/bar.rb set :user, 'aussielunix' ssh_options[:keys] = File.expand_path('~/.ssh/awsbar.pem') server 'bar-01.example.org', :bar 

现在只是在任务的前面,你想要运行任务的阶段

 cap foo deploy cap bar deploy