capistrano
SSH

cap deploy で Permission denied(public key) が出る。

More than 3 years have passed since last update.

RailsでCapistranoを使ってGitHubに置いてあるコードを本番環境にデプロイする運用をしていたところ、突如、publickeyまわりのエラーが出てデプロイできなくなったので、メモっておきます。

発生したエラー(抜粋)

> cap deploy
  * executing "if [ -d /home/user/app/shared/cached-copy ]; then cd /home/user/app/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 2f0ada48590756cfb37c2fcbdab605ed229759d9 && git clean -q -d -x -f; else git clone -q -b master git@github.com:foo/bar.git /home/user/app/shared/cached-copy && cd /home/user/app/shared/cached-copy && git checkout -q -b deploy 2f0ada48590756cfb37c2fcbdab605ed229759d9; fi"
 ** [production_server :: out] Permission denied (publickey).
 ** fatal: The remote end hung up unexpectedly

エラー発生後に試したみたこと

  • GitHub上のプライベートリポジトリへのpushやpull → できる(=公開鍵認証が通る)
  • 本番サーバにもSSHでログイン → できる(=公開鍵認証が通る)

対処法

> ssh-add

以上です。

config/deploy.rbssh_options[:forward_agent] = trueを指定していたにも関わらず、ssh-agentにid_rsaが登録されていませんでした。

ssh-agentについてはssh-agentの基本あたりを見てもらったほうがわかりやすいと思います。