現在のWindows10では、外部からバイナリを探してダウンロードしなくても、公式にOpenSSHサーバーを動作させることができるようになっています。
実際に試してみたので、その手順を紹介します。
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アドレス]になっているため、任意のマシンからアクセス可能になっています。
ラジオボタンで[これらのIPアドレス]を指定すると以下のダイアログが開きます。ここでIPアドレスを指定すると、そのマシン以外からのアクセスを拒否できます(ホワイトリスト)。
LAN(192.168.1.0/24)内の全マシンを許可した場合、以下のような設定になります。
OpenSSHサーバーの起動
OpenSSHサーバーもWindows的な表現ではサービスの一つです。ファイル名を指定して実行でservices.mscを起動すると、"OpenSSH SSH Server"というサービスが停止状態で存在しているはずです。このサービスのプロパティを確認すると、インストールしただけの状態では以下のようになっています。
このGUI上で[開始]を押せばsshdが起動しますし、開始後に[停止]を押せばsshdは終了します。スタートアップの種類を[手動]から[自動]に変更すれば、Windows起動時にsshdも自動起動するようになります。
CLIで起動/停止を制御したければ、以下のようにコマンドを叩けば実現できます。
REM sshd起動 net start sshd REM sshd停止 net stop sshd
OpenSSHサーバーのログ
WindowsなのでOpenSSHサーバーも標準ではイベントログに出力されます。ファイル名を指定して実行でEventVwrを実行するとイベントビューアーが開きますが、[アプリケーションとサービスログ] - [OpenSSH] - [Operational]を開くとsshd経由でのログイン周りのログなどが出力されていることを確認できます。
このイベントログのプロパティを確認するとデフォルトでは以下のようになっており、1028KBに達すると古いエントリからオーバーライトされます。管理上どうでもいい私用マシンなどならこのままでも問題ないかも知れませんが、業務運用するようなマシンではログのアーカイブ等の運用・管理も必要になるでしょう。