LoginSignup
1
0

More than 1 year has passed since last update.

CircleCI×CapistranoでEC2へのSSH接続ができない場合の対処法

Posted at

前提

・CircleCIでCIを構築済
・ローカルからCapistranoを使ってEC2に自動デプロイができている

参考にした記事

CircleCIとCapistranoを使った自動デプロイを構築するにあたって以下の記事を参考にさせていただきました。

筆者の場合は、上記で掲出した記事の内容以外でもSSH接続に関して複数のエラーに遭遇したため、それらのエラーと対処法をまとめていきます。

CircleCIからEC2へのSSH接続に失敗する①

EC2へのSSH接続の際に、まず下記のようなエラーが起きました。

Caused by:
Net::SSH::ConnectionTimeout: Net::SSH::ConnectionTimeout


Caused by:
Errno::ETIMEDOUT: Connection timed out - connect(2) for user [ユーザー名]@[ElasticIP]

EC2のセキュリティグループの設定でローカルIPを設定していたことが原因で、CircleCIからの接続を拒否されていました。
こちらの記事を参考に解決しました。

CircleCIからEC2へのSSH接続に失敗する②

①を実行した後、エラー内容が変わりました。

Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user [ユーザー名]@[ElasticIP]

CircleCIのAdditional SSH KeysにもEC2に接続するための正しい秘密鍵を登録しているのに、認証エラーとされています。
ここでどハマりしましたが、1つずつ考えられる原因を潰していきました。
結論、CircleCIにSSH接続しデバックを行うのが近道でした。

CircleCIにSSH接続をしデバッグを行う

CircleCIの実行経過がわかるページの右上にあるRerunRerun job with SSHをクリックし、実行を待つとWait for SSH sessions$ ssh -p [ポート番号] xxx.xxx.xxx.xxx と表示されます。
ローカルから下記コマンドを入力するとCiecleCIにSSH接続できます。

ssh -p [ポート番号] xxx.xxx.xxx.xxx -i ~/.ssh/[GitHubに接続する際に使用する秘密鍵]

こちらの記事を参考にしました。
※CircleCIを無料プランで使用している場合、複数コンテナを同時にビルドすることはできないため、デバッグが終了したらRerunCancel Jobをクリックしてください。

CircleCIにSSH接続できたら、そこから下記コマンドを入力しEC2に接続できるか確認します。

ssh [ユーザー名]@[ElasticIP]

筆者はここでEC2への接続が成功したため、Additional SSH Keys(秘密鍵)は正しく動作していることが分かりました。

そこで、Capistrano設定ファイルの秘密鍵の指定が間違っているのではないかと推測し、SSH接続しているコンテナ内の秘密鍵を確認したところ(cd ~/.sshls)、id_rsa_[Fingerprintの:がない文字列]が表示され、中身を確認したところCircleCIに登録したEC2へのSSH接続のための秘密鍵と一致しました。
筆者はCapistranoのset :ssh_optionskeys[アプリ名]_rsaを指定していたため、上記で確認したid_rsa_[Fingerprintの:がない文字列]に設定し直すことで、無事CircleCIでCapistranoを使ってEC2にSSH接続することができました!!

まとめ

Capistranoの設定ファイルで指定したkeysの秘密鍵ファイルが存在しない場合でも、ファイルが見つからないエラーではなく、認証エラーが出ることを学びました。
また、CircleCIに登録する秘密鍵の名前を[アプリ名]_rsaにする方法も調べましたが、見つけることができませんでした。
ローカルとCircleCI上では秘密鍵のファイル名が違う状態になっていますが、keysに環境変数を用いて秘密鍵を指定することで、ローカルからでもCircleCIからでもCapistranoによるEC2への接続を可能にしました。

1
0
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
1
0