Obsidian git を目的とした Windows での鍵エージェント設定サンプル

# 目的
Obsidian Git プラグインで SSH 鍵エージェントを利用したい。
ついでに他の接続方法(下記)も同じエージェントを使いたい。
- PuTTY (および WinSCP 等の関連アプリ)
- windows の OpenSSH
- git bash(Git for Windows)
- (未着手) WSL2 上の SSH

# 概要
[Qiita - 混沌を極めるWindowsのssh-agent事情#筆者の構成](https://qiita.com/slotport/items/e1d5a5dbd3aa7c6a2a24#筆者の構成) のバリエーションです。(作者の @slotport 様、素晴しい記事をありがとうございます)

差異は次の 2点です。
- Obsidian Git 用の設定(Git for Windows で Windows 添付の OpenSSH を使う)
- やや細かい手順を記載

# 設定の概要(手順は下で詳述)
- pageant をスタートアップに追加(自動起動)
- 自動起動 pageant に OpenSSH 用オプションを追加
- OpenSSH 設定に pageant 連携を追加
- 環境変数で Git for Windows の ssh を変更(OpenSSH 利用)
- (念の為)Git for Windows の ssh 実行ファイルを隠す
- サインインし直して動作チェック

# 詳しい人向けサマリー(要点のみ)
- pageant に起動時オプション `--openssh-config <ファイルパス>` を追加
- OpenSSH の .ssh/config に `Include <ファイル>` 行を追加(上のファイルを指定)
- Git for Windows が OpenSSH のバイナリを使うよう環境変数 GIT_SSH を設定

※GfW への対応が姑息的なので、他の MSYS2 環境からの鍵エージェント利用には対応していません(そういう利用ケースは稀かと…)

# 設定手順
## pageant をスタートアップに登録
1. Win+R キーで「ファイル名を指定して実行」ダイアログを開き `shell:startup` と入力して OK ボタンでスタートアップフォルダを開く
1. 「新規作成」でショートカットの作成を開始し、PuTTY フォルダの pageant.exe を参照先に選ぶ
1. 「次へ」ボタンで進み、好きな名前を付けて「完了」ボタンを押す

## 自動起動 pageant に OpenSSH 用オプションを追加
1. 上で作成したショートカットを右クリックして「プロパティ」を開く
1. 「リンク先」の内容の最後に半角スペースと ` --openssh-config %USERPROFILE%\.ssh\pageant.conf` を追加する。
   ※ファイル名「pageant.conf」と、そこまでのパスは変えても良いが、後述の手順でも同じ指定にすること
1. 確認：作成したショートカットを実行し、タスクトレイで pageant が動作すること

補足：プロパティの「作業フォルダ」にSSH鍵フォルダを指定しておくと、鍵の追加時にそこから始まるので便利

## OpenSSH 設定に pageant 連携を追加
1. エクスプローラを開き、アドレスバーに `%USERPROFILE%` と入力して移動する
1. 中に `.ssh` フォルダがあるはずなので、それを開く(無ければ作る)
1. config ファイルをメモ帳(又は好きなエディタ)で開く(無ければ作る)
1. 先頭(か適当な位置)に次の1行を追加：`Include pageant.conf`
   - pageant のオプションで別のファイル名やパスを指定した場合は、それに合わせる
   - config ファイルの位置が基準になるので、そこからの相対パスでよい
1. 確認：OpenSSH(Windows の ssh)で動作チェック
   (pageant に鍵を登録し、接続を試す。パスフレーズを聞かれずに済めば OK)

## 環境変数で Git for Windows の ssh を変更(OpenSSH 利用)
1. スタートメニュー → 設定 → システム → バージョン情報 を開く
1. 「デバイスの仕様」下部「関連リンク」の「システムの詳細設定」をクリック(Win11の場合)
1. 表示されたダイアログ下部「環境変数」ボタンをクリック
1. ユーザ環境変数の「新規」ボタンをクリック
1. 以下のように入力して「OK」で確定
   - 変数名：`GIT_SSH`
   - 変数値：`%WINDIR%\System32\OpenSSH\ssh.exe`
1. 確認：ユーザ環境変数に追加され、値の表示が「C:\Windows\System32…」のように変わっている事
1. 環境変数ダイアログを「OK」で閉じる
1. システムのプロパティダイアログも「OK」で閉じる

## (念の為)Git for Windows の ssh 実行ファイルを隠す
1. Git for Windows の Git Bash を開く
1. (Git for Windows 添付の)ssh 類を以下のように移動して隠す
   ```bash
   cd /usr/bin
   mkdir git_for_windows_ssh
   mv ssh* git_for_windows_ssh/
   # 下はスキップしてもよい(使うかもしれないファイルを戻しているが動作は未確認)
   cd git_for_windows_ssh
   mv sshd.exe ssh-copy-id ssh-pageant.exe ../
   ```

### 代替手順：ssh.exe だけ改名
Git Bash で以下を実行
```bash
mv /usr/bin/ssh.exe /usr/bin/gfw_ssh.exe
```

### 巻き戻し方法(移動)
1. Git Bash を開く
1. 移動していたファイルを元の場所に戻す
   ```bash
   cd /usr/bin/git_for_windows_ssh
   mv ssh* ..
   ```
### 巻き戻し方法(代替手順：改名)
Git Bash で以下を実行
```bash
mv /usr/bin/gfw_ssh.exe /usr/bin/ssh.exe
```

## サインインし直して動作チェック
1. 環境変数の変更を有効にするため、一度**サインアウト**する(再起動でも可)
1. サインインし直すと、タスクバーに自動起動された pageant が有るはず
1. pageant にSSH鍵を追加(パスフレーズがあれば聞かれる)しておく
1. 上で追加したSSH鍵を使うホストに Git Bash で `ssh` すると(パスフレーズ不要で)ログインできるはず
1. 同様に、上で追加したSSH鍵を利用する `git` コマンドを試す(パスフレーズ不要のはず)
1. Obsidian Git プラグインの動作を試す(SSH 鍵は pageant に追加しておく)

# 注意点
- pageant 以外(ssh-add など)での鍵の追加はできません
  → Git Bash で ssh-add として pageant.exe にシンボリックリンクを設定するのは可能です(コマンド発行時に .ppk 鍵指定の点に注意)
- 鍵の追加タイミングはご自身で調整してください
  (pageant 起動時に鍵ファイルパスも指定は可能。その場合は起動時にパスフレーズを聞かれます…)

# 参照リンク

## Qiita - 混沌を極めるWindowsのssh-agent事情
https://qiita.com/slotport/items/e1d5a5dbd3aa7c6a2a24
そのものズバリの説明。こちらのおかげで今回の設定ができました。
非常によくまとまっていますので、ぜひ一読されることをお勧めいたします。

## Omni SSH Agent
https://github.com/masahide/OmniSSHAgent
各種の接続を受け付ける汎用 pageant 互換アプリとのこと。
便利そうですが、今回は pageant メイン(+他の互換アプリを使うかも)なのでパスしました。

※ssh-add コマンドからも鍵の追加ができるようです。そのような使い方を希望される方はご検討されては？

## stream-connector
https://www.pg-fl.jp/download/stream-connector.htm
ソケット通信やパイプ入出力を転送するための Windows アプリとのこと。
これを pageant と組み合わせる方法が「Qiita - 混沌を〜」のコメントに有りました。

tcp,wsl,cygwin など、いろいろ対応しているので、ユーティリティとしても活用の機会がありそうですね。

## @ IT - 【Windows 11対応】Path環境変数を設定／編集して、独自のコマンドを実行可能にする
https://atmarkit.itmedia.co.jp/ait/articles/1805/11/news035.html
Windows11 での環境変数の設定手順の紹介です。
画面写真が豊富なので、上の文章だけで分かり辛い場合はご参照ください。