Capistranoを使ってRailアプリをデプロイするとき、直接サーバーに送るのではなく、Githubを経由してファイルが送信されます。
そのため、あらかじめサーバー上で秘密鍵と公開鍵の組み合わせを生成し、公開鍵をGithubに登録しておく必要があります。
そして接続情報は設定ファイル(/etc/ssh/ssh_config または ~/.ssh/config)に記述しておくのですが、接続情報をきちんと書かないとデプロイに失敗してしまいます。
そのため、あらかじめサーバー上で秘密鍵と公開鍵の組み合わせを生成し、公開鍵をGithubに登録しておく必要があります。
そして接続情報は設定ファイル(/etc/ssh/ssh_config または ~/.ssh/config)に記述しておくのですが、接続情報をきちんと書かないとデプロイに失敗してしまいます。
事象
以下のコマンドでRailsアプリをデプロイしようとしました。
$ bundle exec cap production deploy --trace
すると以下のエラーが出力されました。
... git stderr: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. ...
リモートリポジトリ(Githubのこと)への接続に失敗しているようです。
調査
サーバーにSSH接続して設定ファイルを確認してみます。
$ cat ~/.ssh/config Host github HostName github.com IdentityFile ~/.ssh/github/id_rsa User git
おかしそうなところは特にありません。
実際、テスト接続は成功します。
実際、テスト接続は成功します。
$ ssh -T github Hi whitia! You've successfully authenticated, but GitHub does not provide shell access.
過去に別のサーバーに同じ手順でデプロイしたことがあるので、そちらの設定ファイルはどうなっているか確認してみます。
$ cat ~/.ssh/config Host github github.com HostName github.com IdentityFile ~/.ssh/github/id_rsa User git
なんか差異がありますね…
結論
ホスト名は「github」ではなく「github.com」が正しいということでした。
その他、わかったことは…
その他、わかったことは…
- Capistranoでデプロイしたいだけならホスト名の「github」は不要(「github.com」のみでよい)
- 接続情報は /etc/ssh/ssh_config と ~/.ssh/config のどちらに書いてもよい