🔑

GitHubのプライベートリポジトリをクローンする方法3選

2022/11/09に公開

GitHub上にホストされているプライベートリポジトリをクローンするために、認証方式について公式ドキュメントを参照したところ、これまで筆者が利用していた方式から更新されていることに気づきました。

https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git

リンクのドキュメントを読めばそれで終わりな話ではありますが、筆者のように更新に気づかず推奨されない方式で認証している方がいるかもしれないので、それぞれの簡易なチュートリアルと所感を書きます。

GitHub CLI

ghでお馴染みのGitHub CLIはリポジトリのクローンも可能です。
パッケージマネージャーなどからコマンドをインストールしたら認証コマンドを実行します。

$ gh auth login
# 認証の確認
$ gh auth status
# リポジトリをクローン
# zenn-dev/zenn-editorはパブリックリポジトリなので設定が失敗していてもクローンできる点に注意
$ gh repo clone https://github.com/zenn-dev/zenn-editor

Good🙆

  • クローンまでのステップが短い

Not Good🙅

  • この記事では「GitHubの」とターゲットを絞ってはいますがGitHub以外では使えない
  • Gitコマンドの使い分けが必要になる

Git Credential Manager(おすすめ)

Microsoftが開発しているGit Credential Manager(GCM)を利用すると、PATを発行せずに認証できます。

https://github.com/GitCredentialManager/git-credential-manager

# macOSでhomebrewを使ったインストール例
$ brew install git
$ brew tap microsoft/git
$ brew install --cask git-credential-manager-core
.gitconfig
+ [credential]
+     helper =
+     helper = /usr/local/share/gcm-core/git-credential-manager-core
+ [credential "https://dev.azure.com"]
+     useHttpPath = true

Azure DevOpsを使わない人はhttps://dev.azure.comのセクションは不要です。
OSによってコマンドのパスは変わるので、どのPATHにインストールされたかは確認します。

# (オプション)configureコマンドでも設定可
$ git-credential-manager-core configure
# 初回クローン時にOAuthによる認証が行われます
$ git clone https://github.com/zenn-dev/zenn-editor

Good🙆

  • GitHub PATの発行が不要
  • GitHub以外にも対応

Not Good🙅

  • .gitconfigで設定が必要なため、不慣れなユーザーは手間取る可能性が考えられる

sshで認証

お馴染み鍵交換方式による認証です。

https://docs.github.com/en/authentication/connecting-to-github-with-ssh

公式のドキュメントでも秘密鍵はEdDSAで作成するコマンドに変わっていました。
昔RSA 2048で作成した鍵をずっと利用されている場合は暗号強度が十分でないため、作成し直すことをおすすめします。

$ ssh-keygen -t ed25519 -C "your_email@example.com"
$ eval "$(ssh-agent -s)"
$ open ~/.ssh/config

~/.ssh/configをこんな感じで作成or追記

~/.ssh/config
Host *.github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

公開鍵はGitHub CLIから登録可能です。

$ ssh-add ~/.ssh/id_ed25519
$ gh ssh-key add ~/.ssh/id_ed25519.pub
# 接続確認
$ ssh -T git@github.com
$ git clone git@github.com:zenn-dev/zenn-editor.git

ファイアウォールなどで22番ポートが塞がれている場合はssh over httpsでも認証できます。

~/.ssh/config
Host github.com
  Hostname ssh.github.com
  Port 443
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519
# 接続確認
$ ssh -T -p 443 git@ssh.github.com
# URLがssh.github.comな点に注意
$ git clone git@ssh.github.com:zenn-dev/zenn-editor.git

今回は紹介するだけにとどめますが、YubiKeyのようなU2F、FIDO2に対応したを鍵を認証に利用することもできます。
https://www.yubico.com/blog/github-now-supports-ssh-security-keys/

Good🙆

  • httpsを提供していないリモートリポジトリも利用可
  • セキュリティキーと組み合わせるとよりセキュアな認証ができる

Not Good🙅

  • 設定手順、項目が多い
  • 秘密鍵の取り扱いに注意が必要

まとめ

GitHub(github.com)のみの利用であればGCMの利用が設定手順、可用性あたりのバランスが取れていると思います。

GitHubで編集を提案

Discussion