しばたテックブログ

気分で書いている技術ブログです。

Windows 10で利用可能なSSHサーバー、クライアントまとめ

Windows 10ではSSHサーバー、クライアントの機能が使える様になっているのですが、バージョンによって色々違いがあり自分でも混乱してきたのでわかる範囲でまとめました。
必要があれば随時更新します。

Microsoft SSH Server

Windows 10 Anniversary Update(1607)より、開発者機能の一部としてMicrosoft独自のSSHサーバーが利用可能になっています。
サーバーのみの提供でクライアント機能はありません。

この機能の実体は次の2つのサービスになります。*1

  • SSH Server Broker
  • SSH Server Proxy

機能に関する細かい話はこちらの記事を見ると良いでしょう。

こちらの記事では「Server Broker版SSH」と呼ばれ、具体的な用途についても触れられていませんが、Win32-OpenSSHのこちらのIssueにこのSSHサーバーについての質問があり、そこで中の人であるJoeyさんがこう答えています。

github.com

The "Microsoft SSH Server" is installed when you enable developer mode but is unrelated to the Windows Subsystem for Linux. As @jdunn0 said, it's used for the very specific scenario of deploying and testing UWP apps. You can read more about the server and scenario here: https://msdn.microsoft.com/en-us/windows/uwp/get-started/enable-your-device-for-development#ssh

コメントによるとこのサーバは「Microsoft SSH Server」と呼称され、特定のUWPアプリケーションのテスト(Device discovery系の機能っぽい)に使うためのものだそうです。

機能の詳細については、

msdn.microsoft.com

を見ると良いでしょう。

組み込みWin32-OpenSSH

Windows 10 Fall Creators Update(1709)よりMicrosoftによるOpenSSHのポートであるWin32-OpenSSHがOSに組み込まれました。

こちらはMicrosoft SSH Serverと異なりサーバー、クライアント両方の機能が提供されています。

Windows 10 Fall Creators Update(1709)

Fall Creators Updateの時点ではOpenSSHの機能はベータ版です。

GUIからだと「設定→アプリと機能→オプション機能の追加」で機能を追加できます。

f:id:stknohg:20180514172902p:plain

またコマンドではGet-WindowsCapabilityで機能がインストールされているか確認でき、Add-WindowsCapabilityで機能をインストールすることができます。

機能の確認

# 要管理者権限
Get-WindowsCapability -Online | ? { $_.Name -like 'OpenSSH*' }

結果

PS C:\> Get-WindowsCapability -Online | ? { $_.Name -like 'OpenSSH*' }


Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

機能のインストール

# 要管理者権限
# OpenSSHクライアントをインストール
Add-WindowsCapability -Online -Name 'OpenSSH.Client~~~~0.0.1.0'

# OpenSSHサーバーをインストール
Add-WindowsCapability -Online -Name 'OpenSSH.Server~~~~0.0.1.0'

インストールされたOpenSSHはC:\Windows\System32\OpenSSH配下にあり、バージョンはv0.0.18*2になります。

# バージョン確認 (Ver.7.5とコマンドからはバージョンが上手く確認できない...)
PS C:\> ssh -V
OpenSSH_7.5p1, without OpenSSL

サーバー機能は以下のサービスとしてインストールされます。

  • ssh-agent : C:\Windows\System32\OpenSSH\ssh-agent.exe
  • sshd : C:\Windows\System32\openssh\sshd.exe

ちなみにベータ版のためssh-keygenなどの初期設定をしないとsshdサービスが動作しません。
設定方法の詳細は以下のPowerShell Teamのブログにありますので参考にしてください。

blogs.msdn.microsoft.com

なお、このバージョンではsshd_configsshd.exeと同じディレクトリに置く必要があります。

Windows 10 Spring Creators Update(1803)

Spring Creators UpdateでOpenSSHの機能は正式版となり、デフォルトでOpenSSHクライアントが導入済みの状態になっています。
すなわち、何もせずともはじめからssh.exeが使えるということです。

f:id:stknohg:20180514192602p:plain

# 要管理者権限
# SSHクライアントは最初からインストール済み
PS C:\> Get-WindowsCapability -Online | ? { $_.Name -like 'OpenSSH*' }


Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

ちなみに現時点でインストールされているバージョンは、v7.6.0.0p1-Betaです。

PS C:\> ssh -V
OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4

サーバー機能に関してはFall Creators Updateと同様にAdd-WindowsCapabilityでインストールする必要があります。

# 要管理者権限

# OpenSSHサーバーをインストール
Add-WindowsCapability -Online -Name 'OpenSSH.Server~~~~0.0.1.0'

実体のサービスはFall Creators Updateの時から変わりませんが、こちらは正式版とあってサービスの表示名がきちんとした形になっています。

  • ssh-agent(OpenSSH Authentication Agent) : C:\Windows\System32\OpenSSH\ssh-agent.exe
  • sshd(OpenSSH SSH Server) : C:\Windows\System32\OpenSSH\sshd.exe

また、Spring Creators Updateでは、機能のインストール後にいきなりsshdサービスを起動して構いません。
初期処理を自動で行いC:\ProgramData\ssh\sshd_configなどの各種設定ファイルを作成します。*3

このバージョンではC:\ProgramData\ssh\sshd_configを設定する必要があります。

【2018/10/08追記】Windows 10 October 2018 Update(1809)

特に目新しい機能追加は無く、インストールされているバージョンがv7.7.2.0p1-Betaに更新されただけの様です。

PS C:\> ssh -V
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5

【2019/05/22追記】Windows 10 May 2019 Update (1903)

Windows 10 October 2018 Updateから更新されずバージョンはv7.7.2.0p1-Betaのままでした。

PS C:\> ssh -V
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5

【補足】Win32-OpenSSHの開発方針について

最後に補足としてWin32-OpenSSHの開発方針の変更について触れておきます。

もともとWin32-OpenSSHの開発は

github.com

で行われていました。
ちょっと事の経緯は把握できていないのですが、今後はopenssh-portableのWindows対応に舵を取り、openssh-portableのWindows対応が完了した時点でWin32-OpenSSHの方を終息させ、openssh-portable本体を主流としていく方針となった様です。

github.com

もとのWin32-OpenSSHはIssueリリース管理のためだけに残されています。
現在のプロジェクトステータスがWin32-OpenSSHのWikiに載っていますので参照してください。

このため今後OpenSSHの情報を追う際は両方のリポジトリを見ておくと良いでしょう。

*1:なお、一度も開発者モードにしていない場合はサービスはありません

*2:ファイルバージョンから確認できます

*3:この挙動はOpenSSH v1.0.0.0-betaからの変更になります。