capistranoでSSH接続するときにssh agent forwardingが使えます。
書き方は、
production.rb
set :ssh_options, {
user: 'ec2-user',
keys: %w{~/.ssh/x.pem ~/.ssh/y.pem},
forward_agent: true,
auth_methods: %w{publickey}
}
こんな感じです。
これで何がやれるのかというと、
- デプロイ対象のサーバーがX
- デプロイしたいソースのGitリポジトリ(SSH接続)がY
という状況でサーバーXにY.pemを置かずに X->YのSSH接続をすることができます。
上図のように作業端末にX,Yそれぞれの鍵があればいいのです。
ただ、上記のCapistranoのssh設定だけでは使うことができません。
作業端末でssh-add -l
を叩いた時に以下のようになっている必要があります。
$ ssh-add -l
2048 f7:07:18:66:97:f0:8f:7b:40:6f:0b:97:98:de:5e:18 /home/newgyu/.ssh/y.pem (RSA)
どうすりゃいいのかというと、予め下記のコマンドを叩いておく必要があります。
$ ssh-add /home/newgyu/.ssh/y.pem