我需要部署到 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