忽略後量子演算法警告

Wujidadi 問:

在 PowerShell 中執行 git fetchgit pull 等操作時,終端往往會輸出下列警告:

** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html

該如何使它們消失?


Gemini 答:

這是一個非常及時且重要的問題,這個警告來自於 OpenSSH 客戶端(通常是 Git for Windows 附帶的或系統自帶的 SSH 客戶端)在使用非後量子密碼學 (Non-Post-Quantum Cryptography) 演算法連接 SSH 伺服器時發出的。

這個警告雖然是針對安全性的建議,但在日常使用中,如果您信任您的伺服器,可以暫時隱藏它。

要解決這個問題,您需要在 SSH 客戶端配置中指定一個可接受的後量子密碼交換 (Post-Quantum Key Exchange, KEX) 演算法,或者直接隱藏警告。

由於您是在 PowerShell 環境中,我們主要配置的是 ssh.exe 的行為。


🛠️ 解決方法一:配置 SSH 客戶端 (推薦且根治)

您需要在您的 SSH 配置檔案 (config) 中指定一個可接受的 KEX 演算法,讓 SSH 客戶端知道在連接到特定主機時,即使不使用後量子演算法,也不要發出警告

步驟 1:找到或建立 SSH 配置檔案

SSH 配置檔案通常位於您的用戶目錄下的 .ssh 資料夾中。

  • 路徑: C:\Users\<YourUsername>\.ssh\config

  • 操作: 在 PowerShell 中執行以下命令,確保該檔案存在並打開它:

    if (-not (Test-Path "$HOME\.ssh\config")) {
        New-Item -ItemType File -Force -Path "$HOME\.ssh\config" | Out-Null
    }
    notepad "$HOME\.ssh\config"
    

步驟 2:添加配置指令

在打開的 config 檔案中,添加以下配置。您可以選擇應用於所有主機(Host *)或僅針對 Git 服務(例如 Host github.com)。

# 忽略後量子演算法警告
Host *
    # 添加一個已知的非後量子 KEX 演算法到允許列表中
    # e.g., [email protected], diffie-hellman-group14-sha256
    # 這樣會告訴 SSH 客戶端,這個演算法是可接受的,不需要警告。
    KexAlgorithms [email protected]

    # 或者使用更通用的配置來隱藏警告 (如果上述無效)
    # 不過這可能會隱藏其他警告,所以不太推薦
    # LogLevel ERROR

重點解釋: KexAlgorithms [email protected] 的作用是將 [email protected] 這個演算法加入到客戶端的可接受列表中,這樣當連接使用這個演算法時,就不會觸發 OpenSSH 的 PQ 警告。

步驟 3:儲存並測試

儲存 config 檔案後,重新執行 git fetchgit pull,警告應該會消失。


🛠️ 解決方法二:暫時性隱藏警告 (如果方法一無效)

如果方法一因為您的 SSH 客戶端版本或其他配置衝突而無效,您可以嘗試更簡單的環境變數方法來降低 SSH 的日誌級別,從而隱藏這個警告。

在您的 $PROFILE 檔案中添加以下行:

# 在 $PROFILE 中添加

# 設置 SSH_LOGLEVEL 環境變數為 ERROR
# 這會讓 ssh.exe 忽略 WARNING 級別的輸出
$env:SSH_LOGLEVEL = 'ERROR'

# 注意:這將隱藏所有 SSH 的 WARNING 訊息,包括潛在的重要警告。

執行與測試

重新載入您的 $PROFILE (. $PROFILE) 或重新啟動 PowerShell,然後執行 Git 命令,警告就不會再顯示了。


💡 總結與建議

最推薦的方案是 方法一:修改 C:\Users\<YourUsername>\.ssh\config 檔案,添加 KexAlgorithms [email protected]。這只會針對 PQ 警告,保持其他重要警告的輸出。

您想讓我協助您確認您的 SSH 客戶端版本,或幫您打開 C:\Users\<YourUsername>\.ssh\config 檔案嗎?