在 OpenBSD 上停用某些 OpenSSH 金鑰:為什麼對應的「sshd_config」條目被忽略以及為什麼「ssh-keygen -A」產生禁止的金鑰?

在 OpenBSD 上停用某些 OpenSSH 金鑰:為什麼對應的「sshd_config」條目被忽略以及為什麼「ssh-keygen -A」產生禁止的金鑰?

我試圖在我的 OpenBSD 6.9 伺服器上實現以下目標:

  1. 禁止使用除ssh-ed25519兩個密鑰外的所有密鑰伺服器客戶雙方。
  2. 限制ssh-keygen -A僅透過授權演算法產生金鑰ssh-ed25519,僅此而已。

為了實現這些,我在我的 中添加了以下幾行sshd_config

HostKey /etc/ssh/ssh_host_ed25519_key
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

我還在我的中添加了以下幾行ssh_config

CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

我已經刪除了除授權金鑰之外的所有金鑰。

重新啟動sshd:

# rcctl restart sshd                                                                            
sshd(ok)
sshd(ok)

透過執行以下命令驗證我的設定是否被使用後:

# ssh -Q HostbasedAcceptedAlgorithms
# ssh -Q HostKeyAlgorithms
# ssh -Q PubkeyAcceptedAlgorithms

令我驚訝的是,他們都回傳了以下內容:

ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

換句話說,關鍵限制被忽略。

為了安全起見,我什至重新啟動了伺服器,但沒有什麼區別。

一種可能的解決方法是刪除除授權文件之外的所有金鑰檔案。但是,init 腳本/etc/rc有一行 ,ssh-keygen -A它會在每次系統重新引導後、sshd 守護程序啟動之前重新產生所有遺失的 ssh 金鑰,包括那些被禁止的演算法

所以拔掉鑰匙並不能解決問題。

作為一個額外的解決方法,我可以ssh-keygen -A從init 腳本中刪除該行或用我的自定義密鑰生成演算法替換它,但這將導致回到一切開始的地方:必須一遍又一遍地處理這個問題,例如在每次之後系統更新,每當 OpenBSD 團隊發布新版本的/etc/rc.自動刪除該線路並在大量伺服器上測試這種草率的解決方法非常困難,如果出現問題,可能會導致大規模的網路故障。

因此,我繼續調查並挖掘了ssh-keygen.我發現不可能-A從外部(例如透過設定檔)限制交換器的行為。它甚至不執行初步測試密鑰是否被授權,它只是根據硬編碼數組中的演算法列表產生密鑰。避免這種情況的唯一方法是編輯、重新編譯和使用 的自訂分支ssh-keygen,但是每次 OpenSSH 更新後我都必須處理它...

我找到了適用於其他作業系統的部分解決方案,但不適用於 OpenBSD。

有人可以指出我一個正確的解法嗎?為什麼我的sshd_configssh_config金鑰限制被忽略以及如何停止ssh-keygen -A使用禁止的演算法來產生金鑰?

在有人問之前:OpenSSH 在兩個設定檔中都使用了所有其他設置,因此這些設定檔確實是正在載入的實際設定檔。

非常感謝所有有用的答案。

相關內容