Capistrano 3で多段SSHを使用してデプロイするには、.ssh/config
の設定をするとスッキリ書けます。
以下、設定例
deploy.rb
server 'test-server', user: 'ec2-user', roles: %w{app db web}
set :ssh_options, {
keys: %w(~/.ssh/test-key.pem),
forward_agent: true,
auth_methods: %w(publickey)
}
.ssh/config
# 踏み台サーバー
Host fumidai-server
HostName xxx.xxx.xxx.xxx
User ec2-user
IdentityFile ~/.ssh/fumidai.pem
# デプロイ先のサーバー
Host test-server
HostName yyy.yyy.yyy.yyy
User ec2-user
IdentityFile ~/.ssh/test-key.pem
ProxyCommand ssh fumidai-server -W %h:%p
注意点
.ssh/config
ファイルでは、コメントはコード行の末尾に記載しないようにしてください。例えば、以下のようにするとCapistranoでエラーが発生します。
Host test-server # デプロイ先のサーバー
HostName yyy.yyy.yyy.yyy
User ec2-user
IdentityFile ~/.ssh/test-key.pem
ProxyCommand ssh fumidai-server -W %h:%p
通常のSSH接続では問題ありませんが、Capistranoではこの形式が原因でエラーが起こります。
CapistranoはSSH設定情報をパースしてリモート接続を行おうとするため、行末にコメントがあると構文解析が失敗するためです。逆にSSHのconfigが柔軟なフォーマットを持っているってことですね。