Open4

ghcrをPATを使わずGItHub CLIで安全に利用する

daylightdaylight

1. PATHで参照できるディレクトリにcredential helper scriptを置く

~/toolsディレクトリをPATHに入れているのでそこに置いてみる。

~/toos/docker-credential-gh
#!/bin/bash
# This "docker-credential-gh" utility should exist an as executable somewhere in PATH.
#
# Dependencies: gh
#
set -e

cmd="$1"
if [ "erase" = "$cmd" ]; then
  cat - >/dev/null
  exit 0
fi
if [ "store" = "$cmd" ]; then
  cat - >/dev/null
  exit 0
fi
if [ "get" != "$cmd" ]; then
  exit 1
fi

host="$(cat -)"
host="${host#https://}"
host="${host%/}"
if [ "$host" != "ghcr.io" ] && [ "$host" != "docker.pkg.github.com" ]; then
  exit 1
fi

token="$(gh config get -h github.com oauth_token)"
if [ -z "$token" ]; then
  exit 1
fi

printf '{"Username":"%s", "Secret":"%s"}\n' "$(gh config get -h github.com user)" "$token"

実行権限が必要なため付与

$ chmod 755 ~/tools/docker-credential-gh
daylightdaylight

2. dockerのconfigに追加

credHelpersにghの設定を追加

{
  "auths": {},
  "credsStore": "desktop",
  "currentContext": "default",
  "credHelpers": {
    "docker.pkg.github.com": "gh", // 追加
    "ghcr.io": "gh" // 追加
  }
}

credHelpersに登録すると、レジストリの資格情報取得の際に docker-credential-<value> を実行するため、docker login 時に先ほどのヘルパースクリプトを読んでログインできるよう。

daylightdaylight

3. Docker Desktopを起動

Docker DesktopをCredStoreとして利用するため起動します。

4. docker login

$ docker login ghcr.io
Authenticating with existing credentials...
Login Succeeded

できました。感謝!!