[小ネタ] SSH鍵を登録せずにいい感じにGitHubのリポジトリを操作する
2023/01/30 追記
GitHub CLIを使っている人は↓をやらなくても次のコマンドでcredential helperをセットアップできます:
gh auth setup-git
こいつは何をやっているかというと、以下の設定をgit configにかきこんでいます:
[credential "https://github.com"]
helper =
helper = !<path to gh> auth git-credential
[credential "https://gist.github.com"]
helper =
helper = !<path to gh> auth git-credential
追記終わり
GitHubが公式で提供しているGit Credential Managerを使うとSSH鍵やParsonal Access Tokenを利用せずにgit clientからpull/pushをすることが出来ます。Windows/Mac/Linuxに対応しています。
使い方は公式のREADMEに従って行うといいでしょう。
ちょっと補足
何が起きているのか
このツールはgitのcredential helper機能を提供します。具体的には自分のgit config file(~/.gitconfig, もしくは~/.config/git/config)に以下の記述が増えているはずです
[credential]
helper = xxxxx
ツールをインストールして、git configにツールのバイナリへのパスを通すだけなので簡単です。詳しく知りたい人はgit公式マニュアルを読むといいです。
デスクトップがない場合でも動く
例えばSSHで接続したリモートマシンで作業している状況でデスクトップ環境が無い場合でも使えます。
参考: https://github.com/GitCredentialManager/git-credential-manager/blob/release/docs/credstores.md#gpgpass-compatible-files
GNU passというsecret managerを使えるようです。実際試してみると、手元のMacbookだとブラウザ経由で認証が行われますが、ターミナルからだと認証コードを入力する形ですんなり認証できました。
欠点
SSH鍵がなくなるので、コンテナイメージをビルドするときにssh-agentを渡せないのが地味に辛いかも。シークレットをマウントしてゴニョる必要があります。
credentialをゴニョりたいとき
echo "procotol=https\nhost=github.com\nusername=xxx" | git credential fill
Discussion