スポンサーリンク

Windows11 github 版 OpenSSH beta を使ってみた ~ ssh-agent の不具合対処 ~

藤の花っぽい幻想的な風景
記事内に広告が含まれています。

Windows11 標準の OpenSSH に付属する ssh-agent.exe の鍵情報を Ubuntu 22.04 等の新しめの ssh から使用しようとすると、上手く取得できずに公開鍵認証が使用できない不具合があります。この原因は Windows11 標準の OpenSSH のバージョンが 8.6 と古く、新しめ (Ver.8.9以降) の ssh-agent プロトコルに対応できていない為である事が分かっています。

そこで、Windows11 標準の OpenSSH から github 版の OpenSSH に更新する事で、この不具合が解消できるか検証しました。

スポンサーリンク

Windows11 標準の OpenSSH ssh-agent の不具合内容

Windows11 標準の ssh-agent.exe を使用した場合に、WSL Ubuntu 22.04 等の新しめの ssh クライアントから鍵情報を参照しようとすると、上手く受け取ることができない不具合があります。

WSL2 と Linux を使用した場合について、以下の二つの記事にまとめました。

その回避策として、Windows11 ssh-agent.exe をブリッジする wsl2-ssh-agent についても紹介しました。

不具合内容は、以下の二つの Zen の記事が詳しいです。

WSL2のOpenSSH Agent Relayが動かなくなったので調査した
wsl2-ssh-agent: WSL2からssh-agent.exeサービスへのブリッジ

OpenSSH Ver.8.9 以降の ssh-agent 拡張プロトコルに、Windows11 標準の OpenSSH Ver.8.6 の ssh-agent.exe が対応できないために発生する不具合です。

スポンサーリンク

github 版の OpenSSH について

Windows11 標準の openssh とは別に、Microsoft の PowerShell チームが公開しているベータ版の OpenSSH (openssh-portable) があります。

GitHub - PowerShell/Win32-OpenSSH: Win32 port of OpenSSH
Win32 port of OpenSSH. Contribute to PowerShell/Win32-OpenSSH development by creating an account on GitHub.
GitHub - PowerShell/openssh-portable: Portable OpenSSH, all Win32-OpenSSH releases and wiki are managed at https://github.com/powershell/Win32-OpenSSH
Portable OpenSSH, all Win32-OpenSSH releases and wiki are managed at - PowerShell/openssh-portable

この github 版の openssh-portable をインストールされている方もいるようです。

Windows 10 でSSHサーバーするならどっち?「Github版 vs オプション機能版」 - Qiita
あらすじWindows10では2018年の秋から、公式にSSHサーバーの機能が搭載されています。以前から、Github上で公開されていたものが、WindowsのGUI設定画面から使えるようになった…
Windows で SSH で Windows Hello とかセキュリティキーとか
githubからのOpenSSHインストールするときのエラー対処 – 勉強メモ

ベータ版ですが、ssh-agent.exe の不具合が解消できるか試してみます。

Windows11 標準の OpenSSH インストール状況

始めに、Windows11 標準の OpenSSH のインストール状況について調べました。OpenSSH クライアントはインストール済み、OpenSSH サーバーは未インストールの状態です。

設定 -> アプリ -> オプション機能 : OpenSSH クライアントがインストール済み
設定 -> アプリ -> オプション機能 -> オプション機能を追加 : OpenSSH サーバーはインストールされていない

サービスは ssh-agent のみ起動しています。

> get-Service -Name *ssh*

Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent

Windows11 標準の OpenSSH のアンインストール

PowerShell を使用する方法が Microsoft のページに記載されていました。

Windows 用 OpenSSH の概要
Windows 用 OpenSSH Client および Server を使用してリモート コンピューターをインストールしてリモート コンピューターに接続する方法について説明します。
> Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Path          :
Online        : True
RestartNeeded : True

RestartNeeded が True なので再起動します。(再起動後は ssh-agent.exe が起動していませんので、KeePassXC 起動時にエラーメッセージが表示されます)

github 版 OpenSSH のインストール

github 版 OpenSSH の Ver.8.9.1.0 より winget によるインストールが可能となりました。

Install Win32 OpenSSH
Win32 port of OpenSSH. Contribute to PowerShell/Win32-OpenSSH development by creating an account on GitHub.

他に msi や zip や Chocolatey によるインストール方法も記載されていますが、現在は winget を使用する方法が最も簡単かと思います。以下、管理者で起動した PowerShell で実行します。

> winget search openssh
名前         ID                     バージョン ソース
------------------------------------------------------
OpenSSH Beta Microsoft.OpenSSH.Beta 9.1.0.0    winget

> winget install Microsoft.OpenSSH.Beta
見つかりました OpenSSH Beta [Microsoft.OpenSSH.Beta] バージョン 9.1.0.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://github.com/PowerShell/Win32-OpenSSH/releases/download/v9.1.0.0p1-Beta/OpenSSH-Win64-v9.1.0.0.msi
  ██████████████████████████████  5.05 MB / 5.05 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました

サービスの確認と sshd サービスの停止

winget でインストールすると、github 版の OpenSSH は client と server が一緒にインストールされます。また、サービスへの登録も自動で行ってくれます。

> Get-Service -Name *ssh*

Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent
Running  sshd               OpenSSH SSH Server

ssh-agent と sshd が起動していました。sshd は今回は使用しませんので停止します。

> Stop-Service -Name sshd
> Set-Service -Name sshd -StartupType Disabled
> Get-Service -Name sshd | Select-Object -Property Name, StartType, Status

Name StartType  Status
---- ---------  ------
sshd  Disabled Stopped

> Get-Service -Name ssh-agent | Select-Object -Property Name, StartType, Status

Name      StartType  Status
----      ---------  ------
ssh-agent Automatic Running

Windows11 のサービスでも設定が反映されている事を確認します。

PATH の確認

winget で github 版の OpenSSH をインストールすると、PATH も適切に追加してくれます。ターミナルを再起動すると反映されます。github の Wiki に記載されている PATH の追加は不要です。

ssh-agent.exe もサービスとして起動していますので、KeePassXC を再起動すれば鍵情報も登録されます。

> ssh -V
OpenSSH_for_Windows_9.1p1, LibreSSL 3.6.1
> ssh-add -l
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd email@example.com (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd SynologyDS218plus (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd hiro20180901 (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd forVirtualMachine (ED25519)

試しに Windows11 PowerShell から ssh で接続してみます。

> ssh lolipop
[lolipop_username@server ~]$ exit
ログアウト
Connection to ssh.lolipop.jp closed.
> ssh -T github
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

KeePassXC から渡された ssh-agent の情報を利用して、パスフレーズなしでログインできました。

WSL2 や Linux 環境での動作確認

Windows11 で github 版の OpenSSH をインストールした目的は、WSL2 と Linux 環境の新しめの ssh で Windows11 側の ssh-agent.exe の情報を利用できるかを確認する事です。それぞれについて確認します。

WSL2 Ubuntu 22.04 LTS で確認

WSL2 では wsl2-ssh-agent を使用しています。

wsl2-ssh-agent を使用せずに、npiperelay.exe と socat で Windows11 側の ssh-agent に接続するようにして、動作を確認します。

$ ssh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

$ cat ~/.profile
...snip...
# npiperelay & socat により Windows11 側の ssh-agent の情報を ssh で使用する
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ss -a | grep -q $SSH_AUTH_SOCK
if [ $? -ne 0 ]; then
    rm -f $SSH_AUTH_SOCK
    (setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"$HOME/npiperelay/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1
fi

$ ssh-add -l
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd email@example.com (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd SynologyDS218plus (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd hiro20180901 (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd forVirtualMachine (ED25519)

# パスフレーズなしでログイン可能
$ ssh lolipop
[lolipop_username@server ~]$ exit
ログアウト
Connection to ssh.lolipop.jp closed.

WSL2 Ubuntu 22.04 LTS の ssh でも問題なく使用できるようになりました。

Hyper-V 仮想マシンの Ubuntu 22.04 LTS で確認

Windows11 の PowerShell から、Hyper-V 仮想マシンの Ubuntu 22.04 LTS へ ssh でログインして確認しました。

# 172.25.198.204 は Hyper-V 仮想マシンの IP アドレス
# パスフレーズなしでログイン可能
> ssh -A hiro@172.25.198.204

# Hyper-V 仮想マシン Ubuntu 22.04 LTS 内
$ ssh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

$ ssh-add -l
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd email@example.com (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd SynologyDS218plus (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd hiro20180901 (ED25519)
256 SHA256:aaaaaaaaaaaaabbbbbbbbbbbbbccccccccccddddddd forVirtualMachine (ED25519)

# パスフレーズなしでログイン可能
$ ssh lolipop
[lolipop_username@server ~]$ exit
ログアウト
Connection to ssh.lolipop.jp closed.

ssh -A で Linux 側に鍵情報を引き継いで、Linux 側から問題なく鍵情報を使用する事が出来ました。

まとめ

OpenSSH を Windows11 標準のものから github 版に更新する事で、ssh-agent のバージョンが古い事に起因するトラブルを解消する事が出来ました。

Windows11 の github 版 OpenSSH はベータ版ですし、Windows11 標準の機能ではないので誰にでも薦められる方法ではありませんが、WSL2 や Linux の環境と接続する機会が多い方や、多少のリスクを取ってもトラブルを解消したい方には、選択肢の一つかと思います。

これから継続して使用して、他の不具合が生じないか確認していきます。

今回のアイキャッチ画像

Stable Diffusion WebUI で作成しました。藤の花のような幻想的な風景です。

コメント

タイトルとURLをコピーしました