本文涵蓋 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) 會依下列順序從組態檔讀取組態數據:
- 藉由使用
ssh.exe
參數啟動-F
,即可指定組態檔的路徑,以及該檔案的項目名稱。 - %userprofile%\.ssh\config 的用戶組態檔。
- %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(拒絕使用者)
使用 AllowGroups、 AllowUsers、 DenyGroups 和 DenyUsers 指示詞來控制哪些使用者和群組可以連線到伺服器。 allow/deny 指示詞會依下列順序處理:DenyUsers、AllowUsers、DenyGroups 和最後 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,唯一可用的驗證方法是 password
和 publickey
。
這很重要
目前不支援使用 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