#
ドキュメント

Document

自分のための備忘録です。

キーペア

CircleCIが持つのは秘密鍵

ref. https://circleci.com/docs/ja/github-integration/#user-keys-and-deploy-keys

キーの種類

  • Checkout SSH Keys
    • Deploy Key:リポジトリ固有の秘密鍵(デフォルトはリードオンリー でチェックアウトに使用される)
      • 公開鍵のパス:GitHub対象リポジトリ > Settings > Deploy KeysCircleCIの名前で登録 例) https://github.com/{{user}}/{{repository}}/settings/keys
    • User Key:ユーザーのすべてのリポジトリにアクセスできる秘密鍵
  • Additional SSH Keys

GitHub連携(Set Up Project)とDeploy Key

Set up ProjectによってCircleCiSSHキーペアを作成して、CircleCIに秘密鍵を、GitHubに公開鍵を自動で保存する。 上記で作成したSSHキーペアは読み込み専用Read-only)なので、GitHubからPull/Checkoutはできるが、Pushはできない。

  1. CircleCI > Project Settings > SSH KeysDeploy Keyを登録 => CircleCIに作成されるのは秘密鍵
  2. GitHub対象リポジトリ > Settings > Deploy KeysCircleCIの名前で登録 => GitHubに登録されるのは↑とペアの公開鍵

User Key

User Keyはすべてのリポジトリにアクセスできる(デフォルトはRead-only)。
GitHubのマシンユーザーを使用することが推奨されている。

  1. CircleCI > Project Settings > SSH KeysUser Keyを登録 => CircleCIに作成されるのは秘密鍵
  2. GitHubユーザーのSettings > SSH keysに登録 GitHubに登録されるのは↑とペアの公開鍵

鍵の適用

デプロイサーバーにSSH接続

SSH 経由でのデプロイ

[Hostname (ホスト名)] フィールドにキーに関連付けるホスト名を入力します (例: git.heroku.com)。 ホスト名を指定しない場合は、どのホストに対しても同じキーが使われます。

仮にAサーバの秘密鍵Additional SSH Keysに登録しているとする(Additional SSH Keysはその他にも秘密鍵をいくつか登録していると仮定する)。 CircleCIからSSHでAサーバに接続する場合、デフォルトではDeploy KeyHostnameに合致しないキーもふくめてすべてのAdditional SSH Keysに登録されているキーが試される。

【要確認】User Keyは試されていないよう。

GitHub clone

以下の内容はUser Keyを使えば同じことができる(add_ssh_keysは必須)が覚書としてAdditional SSH Keysに登録する方法を記載する。

GitHubに対するAdditional SSH Keysの登録・使用は以下のとおり。

  1. ローカル キーペアを作成
  2. 公開鍵をGitHubの https://github.com/settings/keys に登録
  3. 秘密鍵Additinal SSH KeysHostnamegithub.comで登録
  4. add_ssh_keysでフィンガープリントを指定する(これをしないと権限エラー)
- add_ssh_keys:
      fingerprints:
        - XX:XX.....XX

ssh-add -l

ssh-add -lで確認するとDeploy KeyおよびAdditional SSH Keysが登録されている。

【要確認】User Keyは登録されていないよう。

Deploy KeyのContainer内のパス

checkout命令が発行されたときに/home/circleci/.sshが作成される。逆に言うとcheckout命令を発行しなければ/home/circleci/.sshは作成されない。 checkout命令を発行しなくてもssh-agentにはDeploy KeyおよびAdditional SSH Keysが登録されている。

checkout命令を発行したときの/home/circleci/.sshは以下のとおり。

drwx------ 2 circleci circleci   57 Jan 14 09:51 .
drwxr-xr-x 1 circleci circleci   48 Jan 14 09:51 ..
-rw------- 1 circleci circleci  388 Jan 14 09:51 id_rsa  <=== Deploy Key 秘密鍵
-rw-r--r-- 1 circleci circleci   81 Jan 14 09:51 id_rsa.pub <==== Deploy Key 公開鍵
-rw------- 1 circleci circleci 1445 Jan 14 09:51 known_hosts