はじめに

GitHub で 2FA(2段階認証・2要素認証) を設定したアカウントの Private Repository を Clone する方法。

サーバなど普段使いの PC 以外で Private Repo をクローンしたい時など。

TL;DR

  • 2FA 未設定
    • git clone https://<user>@github.com/<repo user>/<repo>.git でいける
  • 2FA 設定済
    • New personal access token で新規トークンを作成
    • git clone https://<user>@github.com/<repo user>/<repo>.git のパスワードにトークンを入力
  • パスワード/トークン を保持したい場合
    • credential.helper を設定
      • git config credential.helper cache で一時保持
      • git config credential.helper store で保存

目次

  1. はじめに
  2. TL;DR
  3. 詳細
    1. プライベートリポジトリのクローン
      1. 2FA 設定未
      2. 2FA 設定済
    2. パスワードの保持(キャッシュ・永続化)
      1. Mac
      2. Linux
  4. まとめ
  5. 参考文献

詳細

プライベートリポジトリのクローン

2FA 設定未

2FA 未設定なら、この後に通常のパスワード入力でいける(はず)

1
2
3
$ git clone https://<user>@github.com/<repo user>/<repo>.git
Cloning into '<repo>'...
Password for 'https://<user>@github.com': # パスワード入力

2FA 設定済

2FA 設定済だとパスワードを入力してもエラーになる。

1
2
3
4
5
$ git clone https://<user>@github.com/<repo user>/<repo>.git
Cloning into '<repo>'...
Password for 'https://<user>@github.com': # パスワード入力
remote: Invalid username or password.
fatal: Authentication failed for 'https://<user>@github.com/<repo user>/<repo>.git/'

2FA 設定済の場合は personal access token を使う。

New personal access tokenrepo にチェック入れて作成。

Token をコピーして、パスワードを求められたら入力。Token は1度だけしか表示されないので注意。

1
2
3
$ git clone https://<user>@github.com/<repo user>/<repo>.git
Cloning into '<repo>'...
Password for 'https://<user>@github.com': # Token 入力

パスワードの保持(キャッシュ・永続化)

毎回パスワードや Token を打つのは面倒、って場合はパスワードを保持(キャッシュや永続化)するようにする。

参考: Caching your GitHub password in Git - GitHub Help

下記設定の後に、Clone や Pull などリモートリポジトリの操作でパスワードを入力すれば、パスワードが保持される。

Mac

1
2
$ git credential-osxkeychain
$ git config --global credential.helper osxkeychain

Linux

キャッシュの有効期限はデフォルト 15分なので注意。

1
2
$ git config --global credential.helper cache
# or git config credential.helper cache

キャッシュの有効期限を変更したい場合は --timeout オプションを設定する、単位は

1
2
3
# 60秒(= 1分) * 60 => 1時間
$ git config --global credential.helper "cache --timeout=3600"
# or git config credential.helper "cache --timeout=3600"

期限なしに保存したい場合には cache ではなく store を指定する。

1
2
$ git config --global credential.helper store
# or git config credential.helper store

ただし、store だとトークンが平文で保存されてしまうので注意。

1
2
3
4
# --global とした場合は ~/.git-credential に保存
$ cat ~/.git-credentials
https://<user>:<YourTokenPlain>@github.com
# ↑の <YourTokenPlain> 部分に GitHub で生成したトークンがそのまま保存されてしまう

まとめ

  • 2FA 未設定
    • git clone https://<user>@github.com/<repo user>/<repo>.git でいける
  • 2FA 設定済
    • New personal access token で新規トークンを作成
    • git clone https://<user>@github.com/<repo user>/<repo>.git のパスワードにトークンを入力
  • パスワード/トークン を保持したい場合
    • credential.helper を設定
      • git config credential.helper cache で一時保持
      • git config credential.helper store で保存

参考文献

関連記事