Windows Tips

WSL から Windows 10 の ssh-agent (OpenSSH) を利用する

投稿日:2019年3月14日 更新日:

1. 問題発生

日付: 2019年3月13日
環境: WSL の Ubuntu 18.04 LTS / Windows 10 v1803
状況: ssh-agent を利用した状態で ssh コマンドを実行したところ、Windows 10 がクラッシュしました(BSoD というやつです)。この ssh-agent は、Ubuntu のパッケージとしてインストールしたものです。

LXCORE.SYS に問題があった?
LXCORE.SYS に問題があった?

少し対応方法を調べて試してはみましたが、なかなかうまくいかなかったので、Windows 10 にインストールされている OpenSSH を利用することにしました。

Windows 10 Ver.1809 ならこの問題は発生しないようです。

2. Windows 10 の OpenSSH クライアントを準備

Windows 10 には、バージョン 1803 から OpenSSHが正式に組み込まれています。

この OpenSSH は、

  • OpenSSH クライアント
  • OpenSSH サーバー

の2つのアプリケーションに分かれていますが、今回必要なのは「OpenSSH クライアント」だけです。(OpenSSH サーバーは、その Windows 10 に外部からログインするような場合に必要です)

今回の環境では、既に OpenSSH クライアントがインストールされていました。
(OpenSSH サーバーはインストールされていませんでしたが、こちらは必要ありません)

インストール済みであるかどうかは、[設定] – [アプリ] – [アプリと機能]画面にある [オプション機能の管理] を開くと分かります。

オプション機能の管理
オプション機能の管理

以下のように [OpenSSH クライアント] が表示されていれば、インストール済みです。表示されていない場合は、その上にある [機能の追加] からインストールしましょう。

OpenSSH クライアント
OpenSSH クライアント

また、PowerShell を起動して、which sshssh といったコマンドを実行することでも OpenSSH クライアントがインストールされているかどうか確かめられます。

どちらも OpenSSH クライアントがなければ、正常に実行できないはずです。

which ssh を実行すると、Windows 側のコマンドであることが確認できます
which ssh を実行すると、Windows 側のコマンドであることが確認できます
sshコマンドを実行すると、Usage(使い方)が表示されます
sshコマンドを実行すると、Usage(使い方)が表示されます

3. ssh-agent-wsl の利用

やりたいことは、「Windows側 の OpenSSH クライアントが持っている ssh-agent を、WSL側から利用する」なのですが、その橋渡しをしてくれるツールが提供されています。ありがたいですね。

ssh-agent-wsl の利用手順は以下です。

(1) OpenSSH Authentication Agent サービスを動かす

Windows側の ssh-agent.exe は、OpenSSH Authentication Agent という名前のサービスとして常駐します。(実体は C:\WINDOWS\System32\OpenSSH\ssh-agent.exe ファイルです)

これを自動で起動するようにしておきます。

スタートメニューを開き “service” と入力すると「サービス」というアプリケーションが表示されますのでクリックします。

サービス
サービス

[OpenSSH Authentication Agent] という項目を見ると「無効」になっていました。

OpenSSH Authentication Agent
OpenSSH Authentication Agent

右クリックして [プロパティ] を選択します。

[プロパティ] を選択します
[プロパティ] を選択します

[全般]タブにある [スタートアップの種類] のところで「自動」を選択し、[OK]ボタンを押します。

スタートアップの種類を設定します
スタートアップの種類を設定します

これで、Windows 10 起動時に OpenSSH Authentication Agentも自動で起動するようになりましたが、この時点ではまだ動いていないので動かしておきます。

もう一度 [OpenSSH Authentication Agent] を右クリックして、[開始] を選択します。

OpenSSH Authentication Agent サービスを開始
OpenSSH Authentication Agent サービスを開始

以下のように、「実行中」と「自動」という文字が表示されるはずです。

「実行中」と「自動」が表示されているはずです
「実行中」と「自動」が表示されているはずです

(2) ssh-agent-wsl をダウンロードして配置する

ssh-agent-wsl のリリースページ から最新の「ssh-agent-wsl.7z」ファイルをダウンロードします。

ssh-agent-wsl.7z ファイルを解凍し、生成されたフォルダを任意のパスに移動します。移動先は、Windows側のパスであれば、どこでも構いません。

※ .7z 形式の圧縮ファイルを解凍するには、圧縮・解凍ソフト 7-Zip などのアプリケーションを使います。

ここでは、C:\Users\{ユーザー名}\Applications 以下に移動したとします。

配置したフォルダ構成は、以下となりました。

C:\Users\{ユーザー名}\Applications\
  └ ssh-agent-wsl\
      ├ pipe-connector.exe
      └ ssh-agent-wsl

(3) WSL 側から ssh-agent を利用する

Ubuntu (WSL) のターミナルエミュレータを開き、以下のコマンドを実行します。

eval $(/mnt/c/Users/{ユーザー名}/Application/ssh-agent-wsl/ssh-agent-wsl -r)

これで、Windows 側の ssh-agent が利用できる状態になっています。

Ubuntu 側で導入した sshコマンドや ssh-addコマンドがそのまま使えます。

また、Windows 側で鍵を管理していることになるので、WSL のターミナルエミュレータを閉じても鍵は保持されたままになります。再度ターミナルエミュレータを開いたときに、追加し直す必要はありません。ちょっとした利点です。

WSL のターミナルエミュレータを複数開く場合

WSL のターミナルエミュレータを複数開く場合は、それぞれで以下のコマンドを実行する必要があります。

eval $(/mnt/c/Users/{ユーザー名}/Application/ssh-agent-wsl/ssh-agent-wsl -r)

全てのターミナルエミュレータから同じ ssh-agent を使うことになるため、追加されている鍵も共有状態であることに気を付けてください。

4. ライフタイム(鍵を保管する期間)について

ssh-agent.exe (Windows側のOpenSSH Authentication Agent サービス) のライフタイム設定について気になったことを書いておきます。

  • [サービス] の画面から OpenSSH Authentication Agent を再起動しても、鍵はクリアされないようです。
  • ということから予想できる通り、Windows を再起動しても ssh-agent に保存した鍵はそのまま残っています。セキュリティの観点からみると、OpenSSH Authentication Agent を終了したときに、保存した鍵がクリアされた方が安全です。
  • OpenSSH Authentication Agent が終了する際に鍵をクリアする設定項目は提供させていないのでしょうか? 提供されていないのであれば、Windows を終了するタイミングで、ssh-agent に保存された鍵をクリアする(ssh-add -Dコマンドを実行するなど)仕組みを自分で用意しなければいけません。
  • 元々の ssh-agent コマンドには -t オプションでライフタイムが指定できるのですが、どうやら Windows版ではこのオプションがサポートされていないようです。(参照元:GitHub – rupor-github/ssh-agent-wsl の Options に書いてあります)

ということで現時点での 注意点です。

ssh-agent を使い終わったら、ssh-add -Dコマンドを実行して、保存された鍵データをクリアしましょう。

5. おわりに

ssh-agent-wsl により、Ubuntu 18.04 LTS (WSL) 上で ssh-agent が使えるようになりました。
しかし、Ubuntu 側だけで ssh-agent が使えるのであればそれに越したことはないと思っているため、引き続き情報収集は続けていきたいと思っています。

6. 参考

📂-Windows Tips

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Windows

Windows 10 でファイルやフォルダを検索する方法

Windows 10 でファイルやフォルダ検索する方法について説明しています。

Windows

Windows Update (Windows 10) で一部の更新プログラムやドライバーを更新対象外にする方法

Windows 10 特に Home エディションの場合、Windows Update というのはほとんど全自動で動き、ユーザーが動作をコントロールするのは非常に難しくなっています。 そのため、例えば …

Windows

【Windows 10】Windows Update の基礎知識、現在のバージョンを確認する方法

Windows 10 の Windows Update に関する基礎知識、及び現在の バージョン や OSビルド(ビルド番号)を確認する手順について説明します。 ※ このページでは、一般家庭で使用する …

Windows

Windows 10 のツールバー機能を使い、よく使うアプリやフォルダに素早くアクセスする

Windows 10 のツールバー機能について説明します。この機能を使うと、よく使うアプリケーションやフォルダーへ素早くアクセスすることができます。

Windows

Windows 10 のクリップボード履歴・同期機能

目次1. バージョン 1809 から実装されたクリップボード履歴・同期機能2. クリップボードの履歴機能機能説明クリップボードの履歴機能を有効にする手順有効にする手順 その1有効にする手順 その2サン …