LoginSignup
67
53

More than 5 years have passed since last update.

capistranoでデプロイする時のssh-key周りのTips

Posted at

今までサーバー内に入ってgit pullしてデプロイメントをしていたんだけれど、とても21世紀とは思えないのでcapistranoを導入しました。ついでにロードバランサーを設けてアプリケーションサーバー2台の構成にしてみたんですがssh-key周りが気になりました。

これまでサーバ内でssh-keygenして公開鍵をgithubのdeploy_keyに置いていたんだけどこの方法だとサーバ台数が増える度にgithub上の公開鍵の数も増えていくし管理もクソもあったもんではないと思いググっていたらどうやらssh-agentという方法があるらしい。

ssh-agentを使用すると、capistranoコマンドを叩く開発者のssh-keyを使ってデプロイをしてくれる。
まずcapistranoのコードは以下のようになる。

deploy/production.rb
 server '○○○.×××.○○.××',
  user: "hogehoge",
  roles: %w{web app},
  port: 12345
set :rails_env, 'production'
set :stage, :production
set :branch, :master
set :unicorn_rack_env, "production"
set :ssh_options, {
  # capistranoコマンド実行者の秘密鍵
  keys: %w(~/.ssh/id_rsa),
  forward_agent: true,
  auth_methods: %w(publickey)
}

これでcapistranoはコマンド実行者のssh-keyを使ってデプロイをしてくれる。
でもこれだけだとgithubからソースコードを取ってこれないのでgithubの方にも自分の公開鍵を置く必要がある。さらに自分のssh-keyをssh-agentで使用する場合は以下のコマンドをローカル環境で実行する必要がある。

ssh-add ~/.ssh/id_rsa

ssh-agent用に鍵が登録されているかどうかは以下のコマンドで確認することができる。

ssh-add -l

githubに公開鍵が置いてあって、サーバ内のauthorized_keysのpermmisionも600になっているのに、capistranoがgit ls-remoteとかでストップした時にはssh-agentに登録されていない可能性がデカい気がする。この方法ならサーバー台数が数十とかあってもgithubにデプロイ担当者の公開鍵を1度置けば良いので楽だと思った。

ただしデプロイする人が複数人いる場合は、各々の秘密鍵のディレクトリや名称を合わせる必要がありそうなのと、全てのサーバのauthorized_keysにそれぞれの公開鍵をchefなどのプロビジョニングツールで配布する必要がありそう。

67
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
53