共用方式為


適用於 Windows Server 和 Windows 的 OpenSSH Server 組態

本文涵蓋 OpenSSH Server 的 Windows 特定設定(sshd)。

OpenSSH 在 OpenSSH.com 上維護設定選項的詳細說明文件,本檔集中不會重複。

OpenSSH 組態檔

OpenSSH 同時具有伺服器和客戶端設定的組態檔。 OpenSSH 是開源軟體,並已從 Windows Server 2019 和 Windows 10(組建 1809)開始新增到 Windows Server 和 Windows 用戶端作業系統。 因此,這裡不會重複 OpenSSH 組態檔的開放原始碼文件。 您可以在 ssh_config手動頁面上 找到用戶端組態檔,而OpenSSH伺服器組態檔可以在 sshd_config手動頁面上找到。

開啟 SSH Server (sshd) 會依預設從 \ssh\sshd_config%programdata%讀取組態數據,或是使用 sshd.exe 參數啟動-f來指定不同的組態檔。 如果檔案不存在,sshd 會在服務啟動時產生一個具有預設組態的檔案。

在 Windows 中,OpenSSH 用戶端 (ssh) 會依下列順序從組態檔讀取組態數據:

  1. 藉由使用 ssh.exe 參數啟動-F,即可指定組態檔的路徑,以及該檔案的項目名稱。
  2. %userprofile%\.ssh\config 的用戶組態檔。
  3. %programdata% \ssh\ssh_config的系統範圍組態檔。

在 Windows 中設定 OpenSSH 的預設 Shell

默認命令殼層提供使用者在使用 SSH 連線到伺服器時所看到的體驗。 初始預設 Windows 是 Windows 命令提示字元 (cmd.exe)。 Windows 也包含 PowerShell,第三方命令殼層也可用於 Windows,並可能被設為伺服器的預設殼層。

若要設定預設命令殼層,請先確認 OpenSSH 安裝資料夾位於系統路徑上。 針對 Windows,預設安裝資料夾是 %systemdrive%\Windows\System32\openssh。 下列命令會顯示目前的路徑設定,並將預設的 OpenSSH 安裝資料夾加入其中。

命令殼層 要使用的命令
指令 path
PowerShell $env:path

設定預設的 ssh shell 可以透過在 Windows 登錄中將 shell 可執行檔的完整路徑新增到字串值 HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH 來完成 DefaultShell

例如,下列提升許可權的 PowerShell 命令會將 OpenSSH 伺服器的預設殼層設定為 powershell.exe(此路徑設定不適用於 OpenSSH 用戶端):

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 讀取組態數據,或是使用 sshd.exe 參數啟動-f來指定不同的組態檔。 如果檔案不存在,sshd 會在服務啟動時產生一個具有預設組態的檔案。

下列元素可透過 sshd_config 中的設定項目提供 Windows 特定的配置。 這裡可能未列出其他組態設定,因為在線 Win32 OpenSSH 檔中會詳細說明這些設定。

小提示

OpenSSH 伺服器 (sshd) 會在服務啟動時讀取組態檔。 組態檔的任何變更都需要重新啟動服務。

AllowGroups(允許群組)、AllowUsers(允許使用者)、DenyGroups(拒絕群組)、DenyUsers(拒絕使用者)

使用 AllowGroupsAllowUsersDenyGroupsDenyUsers 指示詞來控制哪些使用者和群組可以連線到伺服器。 allow/deny 指示詞會依下列順序處理:DenyUsersAllowUsersDenyGroups 和最後 AllowGroups。 所有帳戶名稱都必須以小寫指定。 如需ssh_config中 PATTERNS 和通配符的詳細資訊,請參閱 sshd_config OpenBSD 手動頁面

使用網域使用者或群組設定使用者/群組型規則時,請使用下列格式: user?domain*。 Windows 允許多種格式來指定網域主體,但可能會與標準 Linux 模式衝突。 因此,* 被新增以涵蓋 FQDN。 此外,此方法會使用 ?、 而非 @,以避免與username@host格式衝突。

工作組使用者/群組和因特網連線的帳戶一律會解析為其本機帳戶名稱(沒有網域部分,類似於標準 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 登入,並允許群組 sshusers 的成員。

AllowUsers localuser@192.168.2.23
AllowGroups sshusers

驗證方法

針對 Windows OpenSSH,唯一可用的驗證方法是 passwordpublickey

這很重要

目前不支援使用 Microsoft Entra 帳戶進行驗證。

AuthorizedKeysFile(授權金鑰檔案)

預設值為 .ssh/authorized_keys。 如果路徑不是絕對路徑,則會以使用者的主目錄(或設定檔圖片路徑)作為參考,例如 C:\Users\username。 如果使用者屬於系統管理員群組,則會改 用 /ssh/administrators_authorized_keys%programdata%

小提示

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。 您也可以通過使用具有 chroot 的自定義 Shell 來設定 SCP,這個 Shell 只允許 SCP 和 SFTP。

GSSAPI 身分驗證 (GSSAPIAuthentication)

配置參數 GSSAPIAuthentication 指定是否允許基於 GSSAPI 的用戶驗證。 GSSAPIAuthentication 的預設值為否。

使用 OpenSSH 用戶端時,GSSAPI 驗證還需要使用 -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 __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 會自動在服務啟動時產生它們。

比賽

使用一或多個準則比對條件。 比對時,會套用後續的組態自變數。 比對會使用 AllowGroups、AllowUsers、DenyGroups、DenyUsers 區段中涵蓋的模式規則。 使用者和組名應該以小寫為單位。

PermitRootLogin

不適用於 Windows。 若要防止系統管理員登入,請使用 Administrators 並搭配 DenyGroups 指令。

SyslogFacility

如果您需要檔案型記錄,請使用 LOCAL0。 記錄會在 %programdata%\ssh\logs 底下產生。 若為任何其他值,包括預設值,AUTH 會將記錄導向至 ETW。 如需詳細資訊,請參閱 Windows 中的記錄設施

配置參數

從 Windows Server 2022、Windows 11 和 Windows 10 xxxx 開始,可以使用下列組態自變數:

  • GSSAPI 身分驗證 (GSSAPIAuthentication)

下列組態自變數不適用於隨附於 Windows Server 和 Windows 用戶端的 OpenSSH 版本:

  • AcceptEnv
  • 允許流式本地轉發
  • AuthorizedKeysCommand
  • AuthorizedKeysCommandUser(授權密鑰命令用戶)
  • 授權主體命令
  • 授權主體命令使用者
  • 公開驗證資訊
  • GSSAPICleanupCredentials
  • GSSAPIStrictAcceptorCheck (GSSAPI嚴格接收者檢查)
  • 基於主機的接受金鑰類型
  • 基於主機的身份驗證
  • 僅使用封包中的名稱進行主機設置
  • IgnoreRhosts
  • 忽略用戶已知主機
  • KbdInteractiveAuthentication
  • KerberosAuthentication
  • KerberosGetAFSToken
  • KerberosOrLocalPasswd
  • Kerberos 票證清理 (KerberosTicketCleanup)
  • PermitTunnel
  • 使用者環境允許 (PermitUserEnvironment)
  • PermitUserRC
  • PidFile
  • 列印最後日誌
  • PrintMotd
  • RDomain
  • 本地流綁定掩碼
  • StreamLocalBindUnlink
  • StrictModes
  • X11DisplayOffset
  • X11轉發功能
  • X11UseLocalhost
  • XAuthLocation