Windows Server および Windows 用 OpenSSH サーバーの構成

Windows Server 2022、Windows Server 2019、Windows 10 (ビルド 1809 以降) に適用されます

この記事では、OpenSSH サーバー (sshd) の Windows 固有の構成について説明します。

OpenSSH では、構成オプションに関する詳細なドキュメントが OpenSSH.com で、オンラインで管理されているため、重複を避け、このドキュメント セットでは説明しません。

OpenSSH 構成ファイル

OpenSSH には、サーバーとクライアントの両方の設定用構成ファイルがあります。 OpenSSH はオープン ソースであり、Windows Server 2019 および Windows 10 (ビルド 1809) 以降の Windows Server および Windows クライアント オペレーティング システムに追加されています。 そのため、OpenSSH 構成ファイルに関するオープンソース ドキュメントの内容については、ここでは繰り返し説明しません。 クライアント構成ファイルについては、ssh_config のマニュアル ページで説明されており、OpenSSH サーバー構成ファイルについては、sshd_config のマニュアル ページで説明されています。

既定では、OpenSSH サーバー (sshd) は %programdata%\ssh\sshd_config から構成データを読み取りますが、-f パラメーターを指定して sshd.exe を起動すると、別の構成ファイルを指定できます。 ファイルが存在しない場合は、サービスの開始時に sshd によって既定の構成で生成されます。

Windows では、OpenSSH クライアント (SSH) は、構成ファイルから次の順序でデータを読み取ります。

  1. -F パラメーターで構成ファイルへのパスとそのファイルのエントリ名を指定して、ssh.exe を起動した場合。
  2. %userprofile%\.ssh\config にあるユーザーの構成ファイル。
  3. %programdata%\ssh\ssh_config にあるシステム全体の構成ファイル。

Windows での OpenSSH 用の既定のシェルの構成

既定のコマンド シェルでは、ユーザーが SSH を使用してサーバーに接続するときに表示されるエクスペリエンスが提供されます。 最初の既定の Windows は、Windows コマンド シェル (cmd.exe) です。 Windows には PowerShell も含まれています。また、サードパーティ製のコマンド シェルも Windows で使用でき、サーバーの既定のシェルとして構成することもできます。

既定のコマンド シェルを設定するには、まず、OpenSSH インストール フォルダーがシステム パスにあることを確認します。 Windows では、既定のインストール フォルダーは、%systemdrive%\Windows\System32\openssh にあります。 次のコマンドは、現在のパスの設定を示しており、それに既定の OpenSSH インストール フォルダーを追加します。

コマンド シェル 使用するコマンド
コマンド path
PowerShell $env:path

既定の ssh シェルを構成するには、Windows レジストリで、シェルの実行可能ファイルへの完全なパス HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH を文字列値 DefaultShell に追加します。

たとえば、次の管理者特権の PowerShell コマンドでは、既定のシェルが powershell.exe に設定されます。

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

sshd_config 内の Windows 構成

Windows では、sshd は既定で、%programdata%\ssh\sshd_config から構成を読み取りますが、-f パラメーターを指定して sshd.exe を起動すると、別の構成ファイルを指定できます。 ファイルが存在しない場合は、サービスの開始時に sshd によって既定の構成で生成されます。

以下に示す要素では、sshd_config のエントリを使用して可能な Windows 固有の構成が提供されます。 他にも使用できる構成設定もありますが、オンラインの Win32 OpenSSH ドキュメント で説明されているため、ここでは取り上げません。

ヒント

OpenSSH サーバー (sshd) は、サービスの開始時に構成ファイルを読み取ります。 構成ファイルを変更するには、サービスを再起動する必要があります。

AllowGroups、AllowUsers、DenyGroups、DenyUsers

サーバーに接続できるユーザーおよびグループを制御するには、AllowGroups、AllowUsers、DenyGroups、DenyUsers ディレクティブを使用します。 allow および deny ディレクティブは、DenyUsers、AllowUsers、DenyGroups、最後に AllowGroups の順に処理されます。 すべてのアカウント名は、小文字で指定する必要があります。 ssh_config 内の PATTERNS とワイルドカードの詳細については、sshd_config OpenBSD のマニュアル ページを参照してください。

ドメイン ユーザーまたはグループを使用してユーザー/グループ ベースの規則を構成する場合は、user?domain* の形式を使用します。 Windows では、ドメイン プリンシパルを指定するために複数の形式を使用できますが、標準の Linux パターンと競合するものが多数あります。 そのため、FQDN をカバーするために * が追加されています。 また、この方法では、形式 "ユーザー名@ホスト" との競合を回避するために、@ の代わりに "?" が使用されます。

ワーク グループ users/groups とインターネットに接続されたアカウントは、常にローカルのアカウント名に解決されます (標準の Unix 名と同様に、ドメイン部分がありません)。 ドメイン ユーザーとグループは、NameSamCompatible 形式 (domain_short_name\user_name) に厳密に解決されます。 すべてのユーザー/グループ ベースの構成規則は、この形式に従う必要があります。

次の例では、ホスト 192.168.2.23 からの contoso\admin を拒否し、contoso ドメインのすべてのユーザーをブロックし、 さらに、contoso\sshusers グループと contoso\serveroperators グループのメンバーであるユーザーを許可します。

DenyUsers contoso\admin@192.168.2.23
DenyUsers contoso\*
AllowGroups contoso\sshusers contoso\serveroperators

次の例では、ホスト 192.168.2.23 からのユーザー localusers のサインインを許可し、グループ sshusers のメンバーも許可します。

AllowUsers localuser@192.168.2.23
AllowGroups sshusers

AuthenticationMethods

Windows OpenSSH の場合、使用できる認証方法は、passwordpublickey のみです。

重要

Microsoft Entra アカウントを使用する認証は、現在サポートされていません。

AuthorizedKeysFile

既定値は、.ssh/authorized_keys です。 パスが絶対パスではない場合、ユーザーのホーム ディレクトリ (またはプロファイル イメージ パス) に対する相対パスと見なされます。たとえば、C:\Users\username となります。 ユーザーが管理者グループに属している場合、代わりに、%programdata%/ssh/administrators_authorized_keys が使用されます。

ヒント

administrators_authorized_keys ファイルには、NT Authority\SYSTEM アカウントと BUILTIN\Administrators セキュリティ グループのアクセス許可エントリのみを含める必要があります。 NT Authority\SYSTEM アカウントには、フル コントロールを付与する必要があります。 BUILTIN\Administrators セキュリティ グループは、管理者が承認されたキーを管理するために必要なグループであり、必要なアクセス権を選択できます。 アクセス許可を付与するには、PowerShell プロンプトを管理者特権で開き、コマンド icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F" を実行します。

ChrootDirectory (v7.7.0.0 に追加されたサポート)

このディレクティブは、sftp セッションでのみサポートされます。 cmd.exe へのリモート セッションでは、ChrootDirectory は考慮されません。 sftp 専用の chroot サーバーをセットアップするには、ForceCommand を internal-sftp に設定します。 scp と sftp だけを許可するカスタム シェルを実装することで、chroot を使用する scp をセットアップすることもできます。

GSSAPIAuthentication

GSSAPIAuthentication 構成引数は、GSSAPI ベースのユーザー認証を許可するかどうかを指定します。 GSSAPIAuthentication の既定値は no です。

GSSAPI 認証では、OpenSSH クライアントを使用する場合にホスト名を指定する -K スイッチを使用する必要があります。 または、SSH クライアント構成で対応するエントリを作成することもできます。 Windows では、OpenSSH クライアントは、既定で %userprofile%.ssh\config から構成データをお読み取ります。

GSSAPI OpenSSH クライアント構成の例を次に示します。

# Specify a set of configuration arguments for a host matching the pattern SERVER01.contoso.com
# Patterns are case sensitive
Host SERVER01.contoso.com
    # Enables GSSAPI authentication
    GSSAPIAuthentication yes
    # Forward (delegate) credentials to the server.
    GSSAPIDelegateCredentials yes

重要

GSSAPI は、Windows Server 2022、Windows 11、Windows 10 xxxx 以降でのみ使用できます。

HostKey

既定値は次のとおりです。

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

既定値がない場合、サービスの開始時に sshd によって自動的に生成されます。

一致したもの

条件の一致には、1 つ以上の条件が使用されます。 一致すると、それ以降の構成引数が適用されます。 一致では、「AllowGroups、AllowUsers、DenyGroups、DenyUsers」セクションで説明されているパターンが使用されます。 ユーザー名とグループ名は小文字にする必要があります。

PermitRootLogin

Windows では適用されません。 管理者のログインを防ぐには、DenyGroups ディレクティブで Administrators を使用します。

SyslogFacility

ファイルベースのログ記録が必要な場合は、LOCAL0 を使用します。 ログは、%programdata%\ssh\logs 下に生成されます。 既定値の AUTH を含むその他の値は、ETW にログが記録されます。 詳細については、Windows のログ機能に関する記事を参照してください。

構成引数

次の構成引数は、Windows Server 2022、Windows 11、Windows 10 xxxx 以降で使用できます。

  • GSSAPIAuthentication

次の構成引数は、Windows Server および Windows クライアントに付属する OpenSSH バージョンでは使用できません。

  • AcceptEnv
  • AllowStreamLocalForwarding
  • AuthorizedKeysCommand
  • AuthorizedKeysCommandUser
  • AuthorizedPrincipalsCommand
  • AuthorizedPrincipalsCommandUser
  • ExposeAuthInfo
  • GSSAPICleanupCredentials
  • GSSAPIStrictAcceptorCheck
  • HostbasedAcceptedKeyTypes
  • HostbasedAuthentication
  • HostbasedUsesNameFromPacketOnly
  • IgnoreRhosts
  • IgnoreUserKnownHosts
  • KbdInteractiveAuthentication
  • KerberosAuthentication
  • KerberosGetAFSToken
  • KerberosOrLocalPasswd
  • KerberosTicketCleanup
  • PermitTunnel
  • PermitUserEnvironment
  • PermitUserRC
  • PidFile
  • PrintLastLog
  • PrintMotd
  • RDomain
  • StreamLocalBindMask
  • StreamLocalBindUnlink
  • StrictModes
  • X11DisplayOffset
  • X11Forwarding
  • X11UseLocalhost
  • XAuthLocation