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

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

我需要部署到 2 台不同的服务器,这两台服务器具有不同的身份验证方法(一台是我大学的服务器,另一台是亚马逊网络服务器 AWS)

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

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

我浏览过 starckoverflow,没有帖子提到如何处理不同的身份验证方法

找到一个帖子上面说的是 2 个不同的密钥,但这个密钥指的是一个服务器和一个 git,它们都使用不同的 pem 文件。事实并非如此。

我必须本教程,但找不到我需要的东西。

我不知道这是否与我的问题相关:我正在使用 ruby​​ 1.9.2p290 和 rails 3.0.10 开发 rails 应用程序,并且正在使用 svn 存储库

欢迎提供任何帮助。非常感谢

答案1

最好通过 ssh-configs 而不是直接使用 Capistrano 来处理。无论如何,这更简单。这个技巧在保罗的回答在 Stackoverflow 上。您将构建~/.ssh/config文件以提供您要查找的主机所需的参数。幸运的是,此配置文件可以接受通配符,这使得区分 AWS 和 Univ 机器变得更容易。

Host *.univ.edu
    IdentityFile ~/.ssh/id_rsa

Host [aws things]
    IdentityFIle ~/.ssh/aws.pem
    ForwardAgent Yes

IdentityFile指令告诉 SSH 要使用哪个 SSH 密钥,也就是告诉它根据您要去的地方选择正确的密钥。这ForwardAgent相当于您提到的 Capistrano 指令。

答案2

我使用这个确切的事情多级来自capistrano-ext扩大。

 gem install capistrano-ext

我有几个不同的阶段在每个中都创建了config/deploy/自己的 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

相关内容