GitHub で廃止予定の SSH キーに関する情報と対処方法

2022年3月15日、GitHub はサービスへのアクセスに使用できる SSH キーの一部を廃止することを決定しました。この廃止に伴い、2022年3月15日以降のビルドで checkout ステップが失敗する可能性があります。

下記のいずれかに該当する場合、2022年3月15日までに対処する必要があります

  1. 2021年11月2日~2022年1月13日の間に作成されたプロジェクトで、Ubuntu 14.04 ベースのマシンイメージや machine: true などを使用したジョブがある。
  2. 2021年11月2日~2022年1月13日の間に非推奨の Docker イメージを使って作成したプロジェクト。
  3. checkout ステップで DSA SSH キーを登録し利用している。

上記のいずれかに該当する場合、2022年3月15日以降もビルドを継続的に実行するために必要な手順を末尾のセクションで説明します。

プロジェクトが下記のいずれかに該当する場合、対処は不要です

  1. 2021年11月2日より前にセットアップされたプロジェクトで、User / Deploy キーを追加していない。
  2. 2022年1月13日より後にセットアップされたプロジェクト。
  3. 2022年1月13日より後に新たに User / Deploy キーを生成し、それが「PREFERRED」キーに設定されている。

上記のいずれかに該当する場合、2022年3月15日までに対処をする必要はありません。念の為に確認したい場合は、以下の API コールでキーが ed25519 であるかどうかを確認します。

curl --request GET \
  --url https://circleci.com/api/v2/project/gh/ORG/PROJECT/checkout-key \
  --header 'Circle-Token: ${CIRCLECI_TOKEN}'

API のレスポンスitems"public_key" : "ssh-rsa を持つ項目がある場合、新しいイメージ(CircleCI イメージまたはマシンイメージ)を使用していることを確認するか、User / Deploy キーを再生成する必要があります。すべてのキー、または「PREFERRED」キーが "public_key" : "ssh-ed25519の場合は、対応は必要ありません。

SSH キー以外にも、ジョブで利用しているイメージの OpenSSH のバージョン 7.2 以上を必要とする変更も加えられました。バージョンの確認には下記のコマンドを実行して下さい。

run: ssh -V

ジョブでmachine: true や 14.04 Ubuntu Machine イメージを利用している

Config に下記のような記載がある場合はこの項目に該当します。

jobs:
  build:
    machine: true # デフォルトの古いマシンイメージを使っている例になります。
    steps:
      - checkout
jobs:
  build:
    machine:
      image: circleci/classic:201709-01 # 14.04 ベースイメージ
    steps:
      - checkout

GitHub の検索を下記の内容で行うと、項目に該当する Config を見つけることもできます。(CircleCI-Public を自分の Organization に変更して下さい。)

org:CircleCI-Public circleci/classic path:.circleci filename:config.yml

上記以外にもこちらから非推奨のイメージのリストの確認をお願いします。非推奨のイメージから更新することをお勧めします。他にも下記のリストの方法で対処は可能です。

  1. 新しいマシンイメージに更新する事で必要な機能が扱えるようになります。
  2. プロジェクト設定で User / Deploy キーを再度生成してください。
    1. キーの削除画面上で操作を行うことができます(Project Settings → SSH Keys → キーの X をクリック)。
      1. 削除したキーの種類に応じて、「 Add Deploy key」 もしくは「Add User key」をクリックし再度キーを作成します。
    2. これはAPI経由でも可能です
  3. OpenSSH 7.2 以上をインストールするステップを - checkoutステップの前に追加します。下記のサンプルコードの例では、OpenSSH 8.1p1をインストールしています。
jobs:
  jobname:
    machine: true
    steps:
      - run:
          name: Install OpenSSH 8.1p1
          command: |
            sudo apt-get update
            mkdir ~/tempdownload; 
            cd ~/tempdownload; 
            wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz; 
            tar zxvf openssh-8.1p1.tar.gz; 
            cd openssh-8.1p1 && ./configure && make && sudo make install
      - checkout

 

ジョブで circleci/イメージを利用している

circleci/はレガシーイメージと呼ばれ、非推奨のイメージになっています。非推奨のイメージから更新することをお勧めします。他にも下記のリストの方法で対処は可能です。

  1. 新しいイメージに更新する事で必要な機能が扱えるようになります。
  2. プロジェクト設定で User / Deploy キーを再度生成してください。
    1. キーの削除画面上で操作を行うことができます(Project Settings → SSH Keys → キーの X をクリック)。
      1. 削除したキーの種類に応じて、「 Add Deploy key」 もしくは「Add User key」をクリックし再度キーを作成します。
    2. これはAPI経由でも可能です
  3. OpenSSH 7.2 以上をインストールするステップを - checkoutステップの前に追加します。下記のサンプルコードの例では、OpenSSH 8.1p1をインストールしています。
jobs:
  jobname:
    machine: true
    steps:
      - run:
          name: Install OpenSSH 8.1p1
          command: |
            sudo apt-get update
            mkdir ~/tempdownload; 
            cd ~/tempdownload; 
            wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz; 
            tar zxvf openssh-8.1p1.tar.gz; 
            cd openssh-8.1p1 && ./configure && make && sudo make install
      - checkout

ジョブでカスタムcircleci/以外のイメージを利用している

OpenSSH 7.2 以上と git がインストールされている docker イメージを利用している場合は、対処する必要はありません。この2つの要件が満たされていれば GitHub SSH キーの廃止後も問題は起こりません。また、イメージにどちらもインストールされていない場合、CircleCI 側で - checkout の処理が行えるようにするので、影響を受けることはありません。

以上のことから、カスタムの docker イメージで影響を受けるのは、古いバージョンの OpenSSH をインストールした場合だけとなります。その場合は下記のリストの方法で対処は可能です。

  1. プロジェクト設定で User / Deploy キーを再度生成してください。
    • キーの削除画面上で操作を行うことができます(Project Settings → SSH Keys → キーの X をクリック)。
      • 削除したキーの種類に応じて、「 Add Deploy key」 もしくは「Add User key」をクリックし再度キーを作成します。
    • これはAPI経由でも可能です
  2. OpenSSH 7.2 以上をインストールするステップを - checkoutステップの前に追加します。下記のサンプルコードの例では、OpenSSH 8.1p1をインストールしています。
    1. jobs:
        jobname:
          docker:
            - image: koalaman/shellcheck-alpine:v0.7.1
          steps:
            - run:
                name: Install OpenSSH 8.1p1
                command: |
                  sudo apt-get update
                  mkdir ~/tempdownload; 
                  cd ~/tempdownload; 
                  wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz; 
                  tar zxvf openssh-8.1p1.tar.gz; 
                  cd openssh-8.1p1 && ./configure && make && sudo make install
            - checkout
  3. git がインストールされていない場合は、- checkout の前に git をインストールする必要があります。
    1. - run:
            name: Install git for checkout
            command: |
                apt-get update && apt-get --no-install-recommends -y install git
  4. 別のイメージに交換するか、カスタムイメージを構築することで、 OpenSSH バージョンと git の両方がインストールされたイメージを使用するようにします。もしくは、いずれもインストールされていないイメージを使用します。

DSA ・ RSA SHA1 の SSH キーを手動登録しているプロジェクト

- checkout に使用する SSH キーを手動で登録した場合、DSA であれば、 キーの更新を行い継続させる必要があります。

GitHubによって規定された要件を満たす新しい SSH キーを生成し、CircleCI 内にそのキーを追加して使用する必要があります。

手動で登録したキーが RSA SHA1 だった場合:

  1. Dokcer やマシンイメージが最新版に更新されている限り、キーを使い続けることができます。また、OpenSSH 7.2 以上がインストールされている必要がありますので、確認する際は : - run: ssh -V を実行して下さい。
  2. 使用しているイメージが古い場合や更新が難しい場合は、GitHubが定める要件を満たした新しい SSHキーを生成し、CircleCI 内にキーを追加して使用することが可能です。

全ての Checkout  キーをリジェネレーションしたい

多くのプロジェクトを抱える組織で、キーをリジェネレーションする必要がある場合、その作業を補助するスクリプトを作成しました。

https://github.com/CircleCI-Public/github-ssh-regeneration

このスクリプトを実行する前に Persoanl API キーが、リポジトリのキーを作成に適切なアクセス権を持っていることを確認して下さい。キーの作成をアクセス権は主に Organization の Owner / Admin になります。

この記事は役に立ちましたか?
3人中2人がこの記事が役に立ったと言っています

コメント

0件のコメント

記事コメントは受け付けていません。