Capistranoでデプロイしたときにリモートリポジトリ(Github)への接続に失敗する場合の対処法

2019年11月28日 12:52
    Capistranoを使ってRailアプリをデプロイするとき、直接サーバーに送るのではなく、Githubを経由してファイルが送信されます。
    そのため、あらかじめサーバー上で秘密鍵と公開鍵の組み合わせを生成し、公開鍵を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 のどちらに書いてもよい

    関連記事

    関連記事はありません。