SSH 狀態控制可讓您在 Windows Server 2019、2022 和 2025 上稽核和設定 SSH 伺服器安全性狀態。 SSH 狀態控制可順暢地與 Azure 治理服務整合(原則、計算機設定),以便您可以:
- 確保符合 產業或組織中的 sshd 標準
- 減少 sshd 型遠端管理的受攻擊面
- 確保整個車隊的 SSHD 設定一致,以確保安全性和生產力
為了協助您示範稽核員的合規性(並協助您視需要採取動作),每個合規性檢查都會透過 [原因 ] 字段包含證據,指出合規性或不符合規範的判斷方式。
您可以自定義 sshd 參數(埠號碼、允許的群組等),或使用原則預設值。
用戶入門檔
- 快速入門:如需隨選操作體驗,請參閱 快速入門:將 SSH 狀態控制 套用至測試計算機。
- 概觀和參考:如需概念資訊、參考和常見問題,請繼續進行 本文 。
選取僅限稽核與稽核和設定行為
指派 SSH 狀態控制原則時,您可以選擇 僅限稽 核行為(也稱為「稽核」)行為或 稽核與設定 (也稱為「設定」)行為。
| 原則定義 | Azure 原則 效果 | 預期事項的注意事項 | |
|---|---|---|---|
| 僅限稽核行為 | **Audit** SSH Posture Control on Windows machines |
auditIfNotExists | 相較於許多熱門的系統映像,此原則包含更嚴格的設定。 例如,拒絕根 SSH 存取。 因此,預期會看到回報 不符合規範 的狀態。 |
| 稽核與設定行為 | **Configure** SSH Posture Control on Windows machines |
deployIfNotExists | 如上所述,您可以預期會看到一開始回報 不符合規範 的狀態。 之後,計算機會重新設定為符合原則,最終產生 符合規範 的狀態。 |
對於現有的計算機,系統管理員通常會從僅限稽核的行為開始,以判斷現有的狀態,並探索相依性,例如系統自動化允許的帳戶。 比較現有的機隊與 SSH 狀態控制項預設值之後,您將決定要自定義的 SSH 狀態控制參數。 在此分析和規劃之後,您接著會轉換至稽核和設定行為(如通道等安全部署做法)。
針對綠地案例或可處置的測試機器,您可以選擇略過該分析,並直接移至稽核和設定行為,從強式 SSH 狀態控制預設值開始全新。
謹慎
在設定任何機器之前,請非常小心地驗證您的新設定。 您可能會不小心失去機器的存取權。
不小心把自己鎖定的範例包括:
- 套用的淨授權設定(組合
allowUsers、denyGroups等)不允許您需要的登入 -
port您為 sshd 設定的會遭到環境中其他控制件封鎖(主機防火牆規則、網路防火牆規則等)- 為了避免超越企業小組界限,SSH 狀態控制只會設定 sshd。 它目前不會嘗試修改機器上的防火牆規則等等,以容納已設定的 sshd 埠。 如果您想要與我們討論這些案例,請與我們連絡(請參閱下方 的其他資源 )。
SSH 狀態控制範圍:規則、預設值和自定義
下表列出可使用 SSH 狀態控制件稽核或設定的專案。 這些都稱為 規則。
大部分的規則都可以透過原則指派 參數 來指定自定義值,以針對或設定和稽核進行稽核。 例如,如果組織中的標準是針對 sshd 使用埠 1111 (而不是 22),您會在原則指派中設定對應的參數。 這些參數具有下表中包含的標識碼。 一般而言,簡短參數名稱會以程序設計方式使用(例如 搭配 az policy assignment create --params ...),而較長的參數顯示名稱則用於 Azure 入口網站工作流程中。
自定義值時,請小心提供與 sshd 相容的值。 例如, allowGroups 採用以空格分隔的組名模式清單。 如需參考,請參閱 sshd_config人頁面。 sshd_config參考也有助於瞭解其他 sshd 行為,例如 允許 和 拒絕 清單的交集方式。
備註
若要保留表格配置,某些儲存格值已移至表格下方的腳註。
| 規則名稱 | 預設值 | 參數名稱 | 參數顯示名稱 |
|---|---|---|---|
| 確定已設定 SSH 的允許群組 | <腳注 1> | AllowGroups |
允許的群組 |
| 確定已設定允許的 SSH 存取使用者 | "" | AllowUsers |
允許的使用者 |
| 確定已設定 SSH 的驗證方法 | 任何 | AuthenticationMethods |
身份驗證方法 |
| 確定已設定 SSH 的拒絕群組 | "" | DenyGroups |
拒絕的群組 |
| 確定已設定 SSH 的拒絕使用者 | "" | DenyUsers |
拒絕的使用者 |
| 確定已設定 SSH 記錄訊息時所使用的設施程式代碼 | LOCAL0 | SyslogFacility |
系統記錄設備 |
| 確定已設定 SSH MaxAuthTries | 6 | MaxAuthTries |
驗證嘗試次數上限 |
| 確定已設定 SSH HostKey | <腳注 2> | HostKey |
主機金鑰 |
| 確定已設定 SSH 的授權金鑰檔案 | <腳注 3> | AuthorizedKeysFile |
授權金鑰檔案 |
| 確定已設定 SSH 的 GSSApiAuthentication | 假的 | GSSAPIAuthentication |
GSSAPI 驗證 |
| 確定已設定 SSH 警告橫幅 | <腳注 4> | Banner |
旗幟 |
| 確定 SSH 使用適當的加密 | aes128-ctr,aes192-ctr,aes256-ctr | Ciphers |
允許的加密 |
| 確定只使用已核准的 MAC 演算法 | hmac-sha2-256 | MACs |
MAC 演算法 |
| 確定已設定 SSH ClientAliveCountMax | 0 | ClientAliveCountMax |
用戶端運作訊息數目 |
| 確定已設定 SSH 埠 | 22 | Port |
港口 |
| 確定已設定 SSH LoginGraceTime | 六十 | LoginGraceTime |
登入寬限時間 |
| 確定已設定 SSH ClientAliveInterval | 3600 | ClientAliveInterval |
用戶端運作間隔 |
| 確定已設定 SSH PermitEmptyPasswords | 假的 | PermitEmptyPasswords |
空白密碼許可權 |
表格註腳:
administrators "openssh users"__PROGRAMDATA__/ssh/ssh_host_ecdsa_key%programdata%/ssh/administrators_authorized_keys#######################################################################/r/n/r/nAuthorized access only!/r/n/r/nIf you are not authorized to access or use this system, disconnect now!/r/n/r/n#######################################################################/r/n- 注意:這會向用戶顯示如下:
####################################################################### Authorized access only! If you are not authorized to access or use this system, disconnect now! #######################################################################
其他 (非 sshd) 原則參數
這些額外的原則參數可在原則指派期間使用。 這些會影響 Azure 原則指派行為,而不是機器上的 sshd 設定。
| 名稱 | 說明 | 預設 |
|---|---|---|
| 包含 Arc 連線的伺服器 | 選取此選項,即表示您同意依每個Arc連線的電腦每月收費。 | 錯誤 |
| 影響 | 啟用或停用此原則的執行 | <取決於 選取僅限稽核與稽核和設定行為> |
原則定義? 原則指派? 來賓指派? 計算機設定? 這一切如何配合在一起?
若要開始使用 SSH 狀態控制,您的核心動作是建立 原則指派。 您的原則指派會將 原則定義 (例如「稽核 Windows 計算機的 SSH 狀態控制」連結至 範圍 (例如「my_factory_3_resource_group」)。
當您使用系統時,您將會遇到其他資源類型和術語,如下所述。
| 說明 | |
|---|---|
| 原則定義 | 在原則服務中,摘要數據,其描述可用稽核和/或組態行為的叢集。 例如,「稽核 Windows 機器上的 SSH 狀態控制」。 |
| 原則指派 | 將抽象原則定義連結至具體範圍,例如資源群組。 原則指派可以包含參數和其他該指派特有的屬性。 |
| 機器設定 | 處理作系統層級稽核和設定設定的 Azure 服務和代理程式。 |
| 來賓指派 | 做為原則指派、計算機和計算機組態服務之間的三向鏈接的資源。 原則會視需要建立及監視來賓指派資源。 如需「來賓」與「計算機」術語的詳細資訊,請參閱 為什麼我在位置看到「來賓設定」和「自動管理」詞彙? |
| 機器 | 已啟用 Arc 的電腦或 Azure VM。 |
關於相容性 (SSH 伺服器實作等)
SSH 狀態控件是針對 單一長時間執行 SSH Server 實例的主要一般用途 Windows Server 案例所設計:
- 其生命週期由 Init 系統管理,例如服務控制管理員
- 其行為受 sshd_config檔案控管,與 OpenSSH sshd 行為一致
- 其有效設定/狀態會由
sshd -T輸出顯示,與OpenSSH sshd行為一致
針對所有支援的OS(請參閱下方),這是預設的SSH伺服器使用案例。
原則上,計算機可能會有任意數目的 SSH 伺服器實例,其存留期會根據任意數目的程式碼基底執行,並從任意數目的位置取得組態(組態檔、命令行自變數、編譯時間參數等等)。 這種情況目前沒有 SSH 狀態控制的範圍。 如果您對未來這類案例感興趣,請 與我們連絡 以討論。
SSH 狀態控制適用於 Azure 原則和機器設定所支援的 Windows Server 2019、2022 和 2025 電腦 -
運行時間無法保證與任何特定計算機的相容性,因為系統管理員和映射產生器可以自由地從 OS 移除元件、讓檔案系統成為唯讀等。
與 sshd_config Include 指示詞的相容性
SSH 狀態控制會嘗試在 sshd_config 中容納和使用 Include 指示詞,如下所示:
- 針對稽核/讀取動作:依賴 sshd -T 來反映 sshd 觀點中的 net 組態,並考慮任何 Include。
- 針對設定/寫入動作:
- 將新的 SSH 狀態控制件特定檔案連結至sshd_config(以 Include 的形式)。 接著,將所有寫入放入連結的 SSH 狀態控制檔案中。 這可增強系統變更的系統衛生和可追蹤性。
與sshd_config Match 指示詞的相容性
SSH 狀態控制是設計來稽核和設定核心 sshd 行為。 它不會嘗試與條件 Match 式區塊互動(如果有的話),這些區塊可以將不同的 sshd 組態套用至特定母體。
與多個sshd_config值的相容性
SSH 狀態控制件不支援針對規則 'port' 使用多個值,也就是將規則 'port' 設定為 22 和 33。 此規則應設定為單一值,以確保稽核和設定案例的適當功能和合規性。 其他規則,例如允許/拒絕使用者和密碼可以有多個值,只要它們新增在單一行。
範例:
- 現有的sshd_config檔案包含一行 「port:22」 和另一行 「port:33」。
- 「稽核 SSH」原則可用來稽核預期的埠值 33。
- 結果:稽核可能會通過或失敗無法預測。
- 建議: 請勿 將此功能與這類案例搭配使用。
如何以程式設計方式查詢結果?
使用 Azure Resource Graph (ARG) 查詢,您可以將指派和狀態數據整合到您自己的工作流程中。 這些範例會在 PowerShell 中使用 Search-AzGraph 來執行 ARG 查詢,但不需要 PowerShell。 您可以從許多進入點使用ARG,包括 Azure 入口網站、Azure CLI、REST 呼叫等等。
在摘要的最高高度,您可以取得每個合規性狀態貯體的計算機計數。 例如:
$machineCountsQuery = @' // SSH machine counts by compliance status guestconfigurationresources | where name contains "SecureShell" | extend complianceStatus = tostring(properties.complianceStatus) | summarize machineCount = count() by complianceStatus '@ Search-AzGraph -Query $machineCountsQuery <# Sample output from an environment with two machines: complianceStatus machineCount ---------------- ------------ Pending 1 Compliant 1 #>若要深入鑽研,以便依計算機查看整體合規性狀態,您可以使用下列專案:
$machinePerRowQuery = @' // SSH machine level compliance guestconfigurationresources | where name contains "SecureShell" | project machine = split(properties.targetResourceId,'/')[-1], complianceStatus = properties.complianceStatus, lastComplianceStatusChecked = properties.lastComplianceStatusChecked '@ Search-AzGraph -Query $machinePerRowQuery <# Sample output: machine complianceStatus lastComplianceStatusChecked ------- ---------------- --------------------------- sshdemovm01 Compliant 2/15/2024 11:07:21 PM sshdemovm02 Pending 1/1/0001 12:00:00 AM #>若要向下切入至設定詳細數據,您可以使用下列專案:
$settingPerRowQuery = @' // SSH rule level detail GuestConfigurationResources | where name contains "SecureShell" | project report = properties.latestAssignmentReport, machine = split(properties.targetResourceId,'/')[-1], lastComplianceStatusChecked=properties.lastComplianceStatusChecked | mv-expand report.resources | project machine, rule = report_resources.resourceId, ruleComplianceStatus = report_resources.complianceStatus, ruleComplianceReason = report_resources.reasons[0].phrase, lastComplianceStatusChecked '@ Search-AzGraph $settingPerRowQuery <# Sample output: machine rule ruleComplianceStatus ruleComplianceReason ------- --------------- ------ ------ sshdemovm01 Ensure that the allowed groups for SSH are configured true ["administrators","openssh users"] contains the expected values: ["administrators","openssh users"] sshdemovm01 Ensure that appropriate ciphers are used for SSH true ["aes128-ctr","aes192-ctr","aes256-ctr"] contains the expected values: ["aes128-ctr","aes192-ctr","aes256-ctr"] sshdemovm01 Ensure that the authorized key file for SSH is configured true "%programdata%/ssh/administrators_authorized_keys" is equal to "%programdata%/ssh/administrators_authorized_keys" sshdemovm01 Ensure that the SSH ClientAliveInterval is configured true 3600 is equal to 3600 sshdemovm01 Ensure that the SSH PermitEmptyPasswords is configured true false is equal to false sshdemovm01 Ensure that the SSH port is configured true 22 is equal to 22 sshdemovm01 Ensure that the SSH MaxAuthTries is configured true 6 is equal to 6 sshdemovm01 Ensure that only approved MAC algorithms are used true ["hmac-sha2-256"] contains the expected values: ["hmac-sha2-256"] sshdemovm01 Ensure that the SSH HostKey is configured true "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key" is equal to "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key" sshdemovm01 Ensure that the SSH LoginGraceTime is configured true 60 is equal to 60 #>
為什麼我在位置中看到「來賓設定」和「自動管理」詞彙?
計算機設定服務也稱為 「客體 設定」和 「自動管理計算機設定」。 當您與服務和文件互動時,可能會遇到這些名稱。 例如:
- 在本文中的 Azure Resource Graph 查詢範例中,數據表稱為
guestconfigurationresources。 - 在 Azure 入口網站中,觀察結果的實用檢視稱為「來賓指派」。
- 在 Azure 入口網站中,套用相關的 VM 擴充功能以啟用電腦設定時,擴充功能標題為「自動管理計算機設定」。
針對 SSH 狀態控制的目的,「來賓」與「計算機」之間沒有有意義的區別。 已啟用Arc的機器和 Azure VM 符合資格。
內建原則定義的標識元為何?
在某些情況下,例如使用 Azure CLI 建立原則指派,可能很有用或有必要依標識符參照原則定義,而不是顯示名稱。
| 顯示名稱 | 識別碼 |
|---|---|
| 審核Windows電腦上的SSH狀態控制 | /providers/Microsoft.Authorization/policyDefinitions/fe4e11ff-f561-4d4a-877c-256cc0b6470e |
| 在Windows電腦上配置SSH狀態控制 | /providers/Microsoft.Authorization/policyDefinitions/42830b63-79aa-4ea5-85dc-6baa719d7d7c |
相關資源
- 如需問題等的支援,請連絡Microsoft支援
- 若要提供意見反應,請討論功能要求等聯繫人:linux_sec_config_mgmt@service.microsoft.com