eval ssh-agentを常用するおまえらは間違っている

流行りの煽りタイトルにしてみました、ボキャがないので思いつかない。キレイに記載できておらずタイトル負け、ご容赦下さい。

# 経緯: 「SSH経由でGitを使うにはwindowsは大変」

Windows上では、Gitを使ってリポジトリのpush/pullにSSHへのアクセスにeval \`ssh-agent\` なる儀式を経なければならないのに苦労してました。

都度にeval \`ssh-agent\`なら良いのです。しかし、常用となるとキレイな使い方ではない、Mac/Linuxのようにssh-agentをserviceとして起動してつかいたい、と思ってました。

いろんな記事を読んで、eval \`ssh-agent\`を~/.bash_profileに登録したり、それが動かなかったり。Windows標準SSH Server経由だとGitのSSH Serverと異なる系列のため、意図して動かなかったりと苦労しました。

「Windowのsshが群雄割拠すぎだろ」というタイトルで本記事を書いたところ「@ttdoda(IWAMOTO Kouichi)」から指摘頂いて楽になりそうなので手順を後述します。(sshの多品種ぶりは、@angel_p_57さんがコメントくださった
[混沌を極めるWindowsのssh-agent事情](https://qiita.com/slotport/items/e1d5a5dbd3aa7c6a2a24)がわかりやすいです）


# 手順 (ssh-agentをサービスで自動起動してgitサーバにアクセスする手順)
※未検証。時間見つけて検証します、ご注意を！

1. Gitクライアントのインストで、画像の通り「Use external OpenSSH」を選ぶ、これでWindows(10以降？に標準内包される)SSHを使えるようになる
    1. winget,chocoletelyは使わない方がよいだろう。下記指定画面が現れず、Git内蔵sshがインストールされ、以降の手順通り実施できない
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/962731/7b595299-f9e1-4177-50ec-98774de0eec1.png)
1. (SSH clientにPATHを通す、前述のWindows標準SSHはPATHが通っているはずなので不要のはず)
1. Windows10以降ならStartボタン横の検索から「サービス」を探し、SSH Serverを起動、なんなら「手動」から「自動」起動に変える、これでwindows起動したときからGithubやらSSH経由を求めるサイトをシームレスにつかえるはず
1. 以降の詳細は、別サイトと同じなので簡易記述のみ
    1. 他のサイト
        1. https://zenn.dev/usagi1975/articles/2024-08-02_sshagent
    1. ssh-keygenで鍵生成
    1. ssh-addで上記、生成した鍵をssh-agentに登録、前述の通り(私なら)win標準SSH Serverが起動してssh-agentも起動しているはずなので、ssh-agentに鍵を登録できる
    1. PowerShellやターミナルで、Gitレポジトリを提供するサーバにログイン。Githubなら、ssh -T git@github.com
    1. git clone git@...でリポジトリをlocal PCにコピー。後はpush/pullなり好きにできる

# 結論(みたいなもの)
- この記事では、githubなどにアクセスする際「eval \`ssh-agent\`」を常用しないといけない設計はキレイじゃない、と解決策を調べたもの、局所解の可能性もあります
- PyCharmで、Githubのプロジェクト毎のアクセスToken発行で今を凌いでますが、追々上記検証予定

----
----
----

# 以下は以前の記事

追って整理する...つもり。

**急ぎのメモで間違っているかも、自己責任でお願いします。**

**本記事ではWindows標準のOpenSSHを使うことを正解としていますが、winでの開発は限定的で、深くGitを用いるならトラブルあるかもしれないことをご注意下さい**

**本記事は、複数のSSH client/serverの中で、gitに応じたsshを使わないとリポジトリのR/Wができない事に起因しています。記事の中ではWindows標準SSHを使いながらGitパッケージのsshでレポジトリとのやり取りをできておられましたが、普通できないはずですので、注意喚起かつMEMOです。**

開発において、Windowでは、毎回、ssh-agent起動して、ssh-addでキー登録して。
Macを使っていると、WindowsのSSHがつらすぎました。

原因は、どこかで見たが、WindowsのSSHが群雄割拠すぎ、が原因かと。

Windowsで開発していたら大抵Gitをインストールするだろう、そこにOpenSSHが付随する。

問題は、それら（後述する）SSHパッケージが「(たぶん)独立していて、連携してくれず、『同じSSHバイナリに対してssh-agent,ssh-addなど実行しない」と正しく機能しないということ。」

例えば、"Gitパッケージ"のOpenSSHでキー登録して、ターミナル閉じたら、そのssh-agentは終了。代わりに動いてしまっていた"Windows公式"のssh-agentは「キー？何寝ぼけた事言っている？」と返してくる、みたいな不備でユーザをパニックのどん底に落としてくる...。

# [以前の記事] WindowsのSSH(パッケージ)の種類

同じOpenSSHだが、独立し連携してくれてないと思う。だから、どのSSHを使うか注意しないといけないのだろう。

- Windows(10以降？)のSSH
    - C:\Windows\System32\OpenSSH。ssh-agent.exeなどある。
- GitインストールしたらはいってしまうSSH
    - C:\Program Files\Git\cmdなどに`start-ssh-agent.cmd`などがある。
- OpenSSHのパッケージをインストしたら入ってしまうSSH
- 他にもあるかも


# [以前の記事] SSH-agentの起動

## [以前の記事] [正解] eval 'ssh-agent`
たぶん、インストしたGitのssh-agentが起動する。
もちろん、一時的には、正しく機能するのだが、ターミナル/bashとじるとssh-agentも終了してしまう。

期待通り読み込んでくれない`.bash_profile`にssh-agent起動スクリプト書いて、でも、別のPowerShellベースだとよみこんでくれなくて「苦労する＝間違い」と定義する。

## [以前の記事] [これも、多分まちがい]
scコマンドは「コマンドプロンプト」専用コマンド？これもWindows11では正しく動いた旨のメッセが表示されるのに、動かない困った子...。しかも、GitのSSHではないので、git+sshは効かないwindowsはレガシー大切に残すけど、メンテナンスしてくれないような..涙
```
sc config ssh-agent start=auto
sc start ssh-agent
```

## [以前の記事] [SSHServerの利用のみなら正解、GitリポR/Wには多分不正解] Windows標準OpenSSHの利用。

管理者権限起動のPowerShellで下記通り、ssh-agentをサービスにて自動起動に変える。もしくはGUIでサービスの中からSSH-agentを自動に変える[Windows 10のssh-agentをコマンド プロンプト、WSL、Git Bashで使ってみた](https://qiita.com/q1701/items/3cdc2d7ef7a3539f351d)。サービスとして「自動化」だけで楽なのに、GitからSSHの利用にはGit付随のSSHclientを使う必要があると思われます。

```
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent
```
これでWin起動したら常にOpenSSHが起動。