我可以用重複的設定覆蓋 sshd_config 中的設定嗎

我可以用重複的設定覆蓋 sshd_config 中的設定嗎

我正在實作一個基本的部署腳本,對於 sshd_config,我需要做的唯一更改是將 PermitRootLogin yes 更改為 PermitRootLogin without-password。我已通讀文檔,他們沒有提到這一點,但這並不是說這是不可能的。

我可以指定第二個 PermitRootLogin 嗎?即 echo 'PermitRootLogin without-password' >> /etc/ssh/sshd_config

如果是這樣,這安全嗎?

根據評論更新:

1)我知道我可以解析文件並更改變數。但我的問題仍然存在。

答案1

不。

您可以簡單地透過新增該行並檢查是否可以登入來測試這一點。

原因:OpenSSHservconf.c有功能

  • process_server_config_line()第 1200-2171 行(7.9p1)
  • 重構為呼叫process_server_config_line_depth()第 1260-2371 行(對於 8.3p1)。

所有全域指令僅在啟動時處理,且全域指令僅處理一次。該設定將保持第一次出現時的狀態。

另一方面,兩次使用相同指令可能會導致誤解。

請重新考慮解析該檔案。如果適用,您也可以替換整個文件。

答案2

TL;DR 是的Debian 及其衍生版本支援早期包含檔案。

德班烏班圖在設定檔中早期有「Include」指令:sshsshd

/etc/ssh/ssh_config:19:Include /etc/ssh/ssh_config.d/*.conf
/etc/ssh/sshd_config:13:Include /etc/ssh/sshd_config.d/*.conf

我同意之前的答案,首先找到的第一個值優先Include處理目錄檔。

echo PermitRootLogin without-password > /etc/ssh/sshd_config.d/PermitRootLogin.conf

答案3

不,大多數設定只會使用它遇到的第一個值; X11Forwarding 設定是一個很容易測試的設定。話雖這麼說,您也許可以利用每個用戶覆蓋設定來允許相同的操作。這些通常標記在底部,因此可以更好地實現您的附加目標。

話雖這麼說,正如其他人提到的 sed 將是一個更乾淨的解決方案。

sed -i 's/PermitRootLogin yes/PermitRootLogin without-password/g' /etc/ssh/sshd_config

答案4

修改之前的答案。截至目前,手動的為了sshd_配置文件以“對於每個關鍵字,將使用第一個獲得的值”開頭。因此,正如其他人已經寫的那樣,重複項將被忽略。

可以使用匹配阻止根據條件覆蓋全域設定。這允許root登入是 Match 區塊中允許的關鍵字之一。

(我提出這個問題是因為我正在使用的作業系統中 sshd 的預設配置已更改為使用包括指令 + glob 模式,將供應商預設值移至單獨的檔案。因此,了解 sshd 如何處理重複的關鍵字非常重要,以便我可以覆寫預設值。

相關內容