流行りの煽りタイトルにしてみました、ボキャがないので思いつかない。キレイに記載できておらずタイトル負け、ご容赦下さい。
経緯: 「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サーバにアクセスする手順)
※未検証。時間見つけて検証します、ご注意を!
- Gitクライアントのインストで、画像の通り「Use external OpenSSH」を選ぶ、これでWindows(10以降?に標準内包される)SSHを使えるようになる
- (SSH clientにPATHを通す、前述のWindows標準SSHはPATHが通っているはずなので不要のはず)
- Windows10以降ならStartボタン横の検索から「サービス」を探し、SSH Serverを起動、なんなら「手動」から「自動」起動に変える、これでwindows起動したときからGithubやらSSH経由を求めるサイトをシームレスにつかえるはず
- 以降の詳細は、別サイトと同じなので簡易記述のみ
- 他のサイト
- ssh-keygenで鍵生成
- ssh-addで上記、生成した鍵をssh-agentに登録、前述の通り(私なら)win標準SSH Serverが起動してssh-agentも起動しているはずなので、ssh-agentに鍵を登録できる
- PowerShellやターミナルで、Gitレポジトリを提供するサーバにログイン。Githubなら、ssh -T git@github.com
- 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
などがある。
- C:\Program Files\Git\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が起動。