我可以用重复的设置覆盖 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 及其衍生产品支持早期包含文件。

DebianUbuntu在配置文件的早期就有“ 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 如何处理重复关键字非常重要,这样我就可以覆盖默认值。)

相关内容