CircleCI の SSHホスト鍵検証(初回接続)| SSH
CircleCI の SSHホスト鍵検証(初回接続)
SSH のホスト鍵検証については こちら を参照してください。
CircleCI でホスト鍵検証が必要になるタイミング
以下では、リモートホストを github.com と仮定します。
checkoutステップcheckoutステップで GitHub からソースコードを取得する際は、GitHub のホスト鍵が適切に扱われるため、通常はgithub.comのホスト鍵を手動でknown_hostsに登録する必要はありません。
ssh-keyscanを実行する場合checkoutを実行しないジョブで GitHub へ SSH 接続する場合は、明示的にknown_hostsへ登録します。
mkdir -p ~/.ssh
ssh-keyscan -H -t ed25519 github.com >> ~/.ssh/known_hosts
chmod 700 ~/.ssh
chmod 600 ~/.ssh/known_hosts
[!IMPORTANT]
ssh-keyscanは GitHub のホスト公開鍵を事前にknown_hostsへ登録し、ホスト鍵検証による対話確認を回避するために使用します。より厳密な運用では、取得したホスト鍵が GitHub の公式公開フィンガープリントと一致することを確認することを推奨します。
CI では、確認済みの
known_hostsの内容をリポジトリや環境変数などで管理する方法が最も安全です。
[!WARNING]
composer config github-oauth.github.com "$OAUTH_TOKEN"は、Composer が GitHub API や HTTPS 経由でパッケージを取得する際の OAuth 認証を設定するものです。
known_hostsの登録や SSH のホスト鍵検証には一切関係ありません。
補足(詳細な説明)
Composer が SSH 接続確認を求めるプロンプト
Dockerfile 内の composer install が、composer.lock に記載された SSH URL のパッケージを取得しようとして発生しました。
対応
- Dockerfile から
composer installを削除しました。 - CircleCI の
buildジョブで生成したvendor/を、そのままイメージへコピーする構成へ変更して解消しました。
Docker BuildKit のプロンプト
docker build 中に BuildKit が Git リポジトリを SSH 経由で参照する処理で github.com へ接続しようとした際に発生しました。
checkout を実行しないジョブでは known_hosts が準備されていないため、事前にホスト鍵を登録することで解消しました。
対応
mkdir -p ~/.ssh
ssh-keyscan -H -t ed25519 github.com >> ~/.ssh/known_hosts
chmod 700 ~/.ssh
chmod 600 ~/.ssh/known_hosts
この設定により、BuildKit が GitHub へ SSH 接続する際のホスト鍵検証による対話確認が発生しなくなります。
[!NOTE]
checkoutを省略したジョブでは、known_hostsを自分で準備する必要があります。