Windows10でOpenSSHサーバーを動かす

 現在のWindows10では、外部からバイナリを探してダウンロードしなくても、公式にOpenSSHサーバーを動作させることができるようになっています。
 実際に試してみたので、その手順を紹介します。
 

前提環境

OS
Windows 10 Pro Version 1809 (Version 10.0.17763.316) x64

 

OpenSSHサーバーの導入

 Windows10の標準状態ではOpenSSHサーバー機能は導入されていません。オプション機能に含まれていますので、[システム設定] - [オプション機能の管理] - [機能の追加] から [OpenSSH サーバー]を選択し、[インストール]を押下します。
システム設定 - オプション機能の管理 - 機能の追加

 なお、[インストール]を押して機能を追加した後、直ちにOpenSSHサーバーが自動起動するわけではありません。要するにインストールしただけであれば、明示的に開始しなければ起動しません。どんな初期設定になっているのか判らないサーバー機能が自動起動するのはセキュリティ的に怖いですが、そうではありませんのでご安心を。
 

OpenSSHサーバーの設定

 Linux環境等でOpenSSHを運用したことがある人ならば、設定ファイルであるsshd_configに設定を記述すればよいことは察しが付くと思います。そのパスがどこかさえ判れば、基本的な設定内容はLinuxと同様です*1

 Windows版のOpenSSH絡みのパスを整理しておくと、標準では以下のようになっています。

- Path
Executable binary %WINDIR%\System32\OpenSSH
例. C:\Windows\System32\OpenSSH
sshd_config %PROGRAMDATA%\ssh\sshd_config
例. C:\ProgramData\ssh\sshd_config
authorized_keys %USERPROFILE%\.ssh\authorized_keys
例. C:\Users\USERNAME\.ssh\authorized_keys

sshd_configはsshd.exeの起動パラメータに-fオプションで指定することで任意ファイルを指定可能

 OpenSSHサーバーをインストールした後、%PROGRAMDATA%\ssh\sshd_configはほとんどコメントアウトされた状態で存在しています。
 必要に応じてコメントアウトを外したり設定値を変更して下さい。コマンドプロンプトから作業するなら以下のようなコマンドを叩くことになるでしょう。

cd %PROGRAMDATA%\ssh\

REM デフォルト設定のバックアップを作成
copy sshd_config sshd_config.bak

REM sshd_configを編集
notepad sshd_config

REM デフォルト設定からの差分を確認
fc sshd_config sshd_config.bak

 

 例えば、パスワード認証を許可せず公開鍵認証のみを有効にして、Administratorsグループに属するユーザーでも%USERPROFILE%\.ssh\authorized_keysを見てほしいという設定をすると以下のような差分が確認できるはずです。

>fc sshd_config sshd_config.bak
ファイル sshd_config と SSHD_CONFIG.BAK を比較しています
***** sshd_config

PubkeyAuthentication yes

***** SSHD_CONFIG.BAK

#PubkeyAuthentication yes

*****

***** sshd_config
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no
***** SSHD_CONFIG.BAK
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
*****

***** sshd_config

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

***** SSHD_CONFIG.BAK

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

*****

 

Windows Firewallの設定

 OpenSSHサーバーをインストールすると、sshdがTCP22番ポートを待ち受けるための受信の規則が"OpenSSH SSH Server (sshd)"という名前で自動作成されていますので、何もしなくてもOpenSSHサーバーへの通信が可能な状態になっています。

 が、ハードニングの観点から接続元ホストを絞りたいなど、ファイヤーウォールで何らかの制限をかけたいこともあるでしょう。ここでは、192.168.1.0/24のLAN内に設置されており、LAN内からの接続のみ許可するように設定する場合を例として示します。

 [セキュリティが強化されたWindows Defender ファイヤーウォール]から"OpenSSH SSH Server (sshd)"という名前の受信の規則のプロパティを表示させ、[スコープ]タブを開きます。デフォルトでは以下のように、リモートIPアドレスが[任意のIPアドレス]になっているため、任意のマシンからアクセス可能になっています。
default RX rule of OpenSSH SSH Server (sshd)

 ラジオボタンで[これらのIPアドレス]を指定すると以下のダイアログが開きます。ここでIPアドレスを指定すると、そのマシン以外からのアクセスを拒否できます(ホワイトリスト)。
Specify IP address in Windows Firewall

 LAN(192.168.1.0/24)内の全マシンを許可した場合、以下のような設定になります。
LAN restricted RX rule of OpenSSH SSH Server (sshd)
 

OpenSSHサーバーの起動

 OpenSSHサーバーもWindows的な表現ではサービスの一つです。ファイル名を指定して実行でservices.mscを起動すると、"OpenSSH SSH Server"というサービスが停止状態で存在しているはずです。このサービスのプロパティを確認すると、インストールしただけの状態では以下のようになっています。
Properties of OpenSSH SSH Server service

 このGUI上で[開始]を押せばsshdが起動しますし、開始後に[停止]を押せばsshdは終了します。スタートアップの種類を[手動]から[自動]に変更すれば、Windows起動時にsshd自動起動するようになります。
 CLIで起動/停止を制御したければ、以下のようにコマンドを叩けば実現できます。

REM sshd起動
net start sshd

REM sshd停止
net stop sshd

 

OpenSSHサーバーのログ

 WindowsなのでOpenSSHサーバーも標準ではイベントログに出力されます。ファイル名を指定して実行でEventVwrを実行するとイベントビューアーが開きますが、[アプリケーションとサービスログ] - [OpenSSH] - [Operational]を開くとsshd経由でのログイン周りのログなどが出力されていることを確認できます。

 このイベントログのプロパティを確認するとデフォルトでは以下のようになっており、1028KBに達すると古いエントリからオーバーライトされます。管理上どうでもいい私用マシンなどならこのままでも問題ないかも知れませんが、業務運用するようなマシンではログのアーカイブ等の運用・管理も必要になるでしょう。
Properties of OpenSSH/Operational event log
 

*1:Windows版では指定不可能なオプションなどがあります。詳細は末尾に掲載の参考URL参照。