Windows ServerでSSHサーバーを構築する方法

概要

本記事では、Windows Server 上に OpenSSH Server をインストールし、鍵認証・サービス構成・ファイアウォール設定までをステップ形式で解説します。

変数表記について

変数名 設定例 備考
<<SERVER>> 192.168.1.10 接続先ホスト名またはIPアドレス

ステップ 1: OpenSSH サーバーのインストール

管理者権限の PowerShell を起動し、次のコマンドを実行します

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

ステップ 2: サービス起動&自動起動設定

インストール後、SSH サーバー(sshd)サービスを起動し、自動起動に設定します:

# サービス開始
Start-Service sshd

# 自動起動を有効にする
Set-Service -Name sshd -StartupType Automatic

💡 補足
sshd サービスを初回起動すると、自動的に初期設定ファイルやホストキーが生成されます。
これには以下のファイルが含まれます:

  • %ProgramData%\ssh\sshd_config(設定ファイル)
  • %ProgramData%\ssh\ssh_host_*(ホスト鍵一式)

設定変更を行う場合は、これらのファイルが生成された後に編集してください。

ステップ 3: ファイアウォール設定

SSH 通信(通常ポート 22)を許可するため、Windows Defender ファイアウォールにインバウンドルールを登録します:

New-NetFirewallRule -Name "OpenSSH-Server" -DisplayName "OpenSSH Server (sshd)" `
  -Enabled True -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow

ステップ 4: 鍵認証方式の設定(推奨)

  1. クライアント側のSSHキー生成と設定手順はこちら

  2. authorized_keysに公開鍵を登録します

    • 一般ユーザーの場合は、ユーザープロファイル配下の .ssh\authorized_keys に公開鍵を登録します。
    • Administratorsの場合は、%ProgramData%\ssh\administrators_authorized_keys に登録します。
  3. サーバー側で sshd_config(通常 %ProgramData%\ssh\sshd_config)を編集し、以下を確認/設定します:

    PubkeyAuthentication yes
    AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
    

ステップ 5: 初回接続と確認

クライアントから次のように接続します:

ssh Administrator@<<SERVER>>

初回接続時にはホストキーの確認プロンプトが表示されます。
接続後、whoami コマンドなどでログインユーザーを確認し、期待するユーザーであることを確認してください。

ステップ 6: 制限とセキュリティ強化

  • sshd_config で以下の設定値を追加/変更します(例):
    Port 2222
    AllowGroups SSHAdmins
    AllowUsers Administrator deployuser
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PubkeyAuthentication yes
    
    • Port 2222
      デフォルトのポート22から変更することで、一般的な攻撃を回避しセキュリティを向上させます。
    • AllowGroups SSHAdmins
      SSH接続を許可するグループを限定し、不正アクセスのリスクを低減します。

    ℹ️ 注意
    Windows Server 2025 以降では、SSH接続を許可するグループ制限がデフォルトで適用されます。また、一部の言語環境では、組み込みの "OpenSSH Users" グループ("openssh users")が正しく機能しない場合があります。

    • AllowUsers Administrator deployuser
      接続可能なユーザーを限定し、不要なアカウントからのアクセスを防ぎます。
    • PasswordAuthentication no
      パスワード認証を無効にし、鍵認証のみに限定することで安全性を高めます。
    • KbdInteractiveAuthentication no
      キーボードインタラクティブ認証を無効にし、不正な認証方法を制限します。
    • PubkeyAuthentication yes
      鍵認証を有効にし、より安全な認証方式を採用します。
      SSHAdmins グループや deployuser アカウントを事前に作成し、必要最小限の権限に抑えます。
  • 接続ログの監査を強化するため、LogLevel VERBOSE に設定し、ログを常時収集できるようにします。

ステップ 7: ログの確認

  • PowerShell から直近ログを取得するには以下を実行します:

    Get-WinEvent -LogName OpenSSH/Operational `
      | Where-Object { $_.TimeCreated -ge (Get-Date).AddHours(-1) } `
      | Select-Object TimeCreated, Id, LevelDisplayName, Message
    

    💡 補足
    実際に使用可能な ログ名は以下で確認できます:

    wevtutil el | findstr OpenSSH
    

    表示された名前を -LogName に指定してください。

まとめ

Windows Server 上に SSH サーバーを構築することで、Linux/Unix 環境と同様の SSH 接続管理が可能になります。鍵認証やファイアウォール設定、サービス構成などを正しく設定することで、安全なリモート管理基盤を構築できます。