使用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]也好像不凑效。