㊙️

git CLIで使用したい鍵をコマンド上で明示的に宣言するには

2023/08/01に公開

TL;DR

git -c core.sshCommand="ssh -i ~/.ssh/YOUR_SSH_PRIVATE_KEY" clone git@TARGET_REPOS.git

毎回「どうやってSSH鍵指定するんだっけ?」ってなるので、備忘録として書き残すことにする。
サンプルは git clone. 使いたいコマンドに応じてここから末尾を変えるだけでいい。

rsync とかでも似たような方法でsshに鍵を与えることができるが、git も同様のパターンでいけるんだ...となった。

[08/02追記、タイトル間違えてることに気づいた。悲しい]

何がしたかったのか

GitHub では、ssh-keygen などで生成された鍵を使って git を使うことを推奨している。
(気づいたらID/PASS認証で Git 接続できなくなった)

プライベートであれば、(お作法としてはあまりよろしくないが)1つデフォルトの鍵を作成して使い回せばいいかもしれないが、業務では鍵を複数所有することがしばしば発生する。
ざっとインターネットの知見を浅く見ただけではうまく鍵を運用できなかったため、うまくいく方法を調べたことを備忘録として記しておく。

環境

  • Windows 11 / Desktop
  • git for Windows v2.41.0
    • chocolatey でインストール
    • git 2.10.0 以降じゃないと対応していないとか
  • 自分の GitHub アカウント

準備

ssh-keygen

ssh-keygen -t ed25519 -a 128 -f ~\.ssh\for_github -C "ssh to github"

個人的なポイント

  • 昨今、推奨されている ED25519 鍵を使用する。
  • rounds のデフォルト 16 は心許ないため 128 を指定する。
    • 一応デフォルトのままでも ED25519 を使えばセキュア。気持ちの問題。
  • パスフレーズは短くても絶対に設定する
    • どんなに設定をよりセキュアにしても、パスフレーズ付いてなかったらザル。

GitHub に鍵を登録

.pub ファイルの中身を GitHub の自分のアカウントに覚えさせる。

ssh の検証(ssh -T)

VSCode などで SSH環境を整備していると自ずと触っているであろう ~/.ssh/config に手を付ける

vi ~/.ssh/config
>> #以下の記述を追加する
Host github
  HostName github.com
  IdentityFile ~/.ssh/for_github #ここに自分の鍵のファイル名
  User git
<<

ssh -T github

これで正しく動けば問題なし。
テスト用として設定したので、終わったら消しておく。

ssh鍵付きで git clone

GIT_SSH_COMMAND という環境変数に投げ込むこともできるが、今回はCLI上で簡潔したい。

git -c core.sshCommand="ssh -i ~/.ssh/YOUR_SSH_PRIVATE_KEY" clone git@TARGET_REPOS.git

これで正しく動くはず。

Discussion