1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-02-05

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

経緯: 「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事情がわかりやすいです)

手順 (ssh-agentをサービスで自動起動してgitサーバにアクセスする手順)

※未検証。時間見つけて検証します、ご注意を!

  1. Gitクライアントのインストで、画像の通り「Use external OpenSSH」を選ぶ、これでWindows(10以降?に標準内包される)SSHを使えるようになる
    1. winget,chocoletelyは使わない方がよいだろう。下記指定画面が現れず、Git内蔵sshがインストールされ、以降の手順通り実施できない
      image.png
  2. (SSH clientにPATHを通す、前述のWindows標準SSHはPATHが通っているはずなので不要のはず)
  3. Windows10以降ならStartボタン横の検索から「サービス」を探し、SSH Serverを起動、なんなら「手動」から「自動」起動に変える、これでwindows起動したときからGithubやらSSH経由を求めるサイトをシームレスにつかえるはず
  4. 以降の詳細は、別サイトと同じなので簡易記述のみ
    1. 他のサイト
      1. https://zenn.dev/usagi1975/articles/2024-08-02_sshagent
    2. ssh-keygenで鍵生成
    3. ssh-addで上記、生成した鍵をssh-agentに登録、前述の通り(私なら)win標準SSH Serverが起動してssh-agentも起動しているはずなので、ssh-agentに鍵を登録できる
    4. PowerShellやターミナルで、Gitレポジトリを提供するサーバにログイン。Githubなら、ssh -T git@github.com
    5. 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で使ってみた。サービスとして「自動化」だけで楽なのに、GitからSSHの利用にはGit付随のSSHclientを使う必要があると思われます。

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

これでWin起動したら常にOpenSSHが起動。

1
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?