使用Capistrano向EC2部署Django代码--关于SSH相关的配置

在使用Capistrano向EC2部署Django代码的文章中,主要给出了Capistrano的配置文件,这里具体说一下SSH的相关配置。

Capistrano里面和SSH相关的有几个设置的地方:

复制代码
set :user, "ec2-user" #连接EC2的用户名
set :use_sudo, false  #连接EC2之后进行deploy:setup的时候,不允许使用sudo
default_run_options[:pty] = true
ssh_options[:forward_agent] = true #采用SSH agent forwarding技术
ssh_options[:port] = 22
ssh_options[:keys] = [File.join(ENV["HOME"], ".ec2", "aws_xxx"), File.join(ENV["HOME"], ".ssh", "deploy_xxx")] #指定连接EC2需要用的keyfile
复制代码

使用SSH的两个地方:

  • Local连接EC2:基于key pair认证
  • EC2连接github

1:连接EC2的时候是基于key pair的认证。在命令行下一般这么使用

ssh -i sample.pem ec2-user@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com

这里需要通过[ -i ]明确指定你的私钥位置,你可以使用AWS帮你生成的*.pem,也可以是自己通过ssh-keygen产生的私钥。这个可以通过ssh_options[:keys]进行配置。如果不配置的话,默认会询问你的密码。其实你也可以把该私钥的放到ssh agent里面就可以不用通过配置文件的ssh_options来明确指定了。

ssh-add /the/full/path/to/private-key

2:EC2连接github的时候,可以有三种方法,我们这次采用SSH agent forwarding方法。

具体参照:https://help.github.com/articles/using-ssh-agent-forwarding

复制代码
# .ssh/config
Host *.compute.amazonaws.com
  ForwardAgent yes
# deploy/development.rb
ssh_options[:forward_agent] = true
ssh_options[:port] = 22
ssh_options[:keys] = [File.join(ENV["HOME"], ".ec2", "aws_op")]
复制代码

注意:EC2连接github使用的SSH Key必须要事先通过ssh-add告诉ssh agent(具体内容可以通过ssh-add -l来进行确认)否则连不通。而且具体使用的key也不必通过ssh_options[:keys]进行配置。如果你本地有多个可以访问指定repo的多个github账号,且他们的SSH key都加入到ssh agent里的时候,怎么具体指定使用哪个账号进行操作,暂时还无法知晓,即使指定了ssh_options[:keys]也好像不凑效。

发表回复