我正在实现一个基本的部署脚本,对于 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 及其衍生产品支持早期包含文件。
Debian和Ubuntu在配置文件的早期就有“ Include
”指令:ssh
sshd
/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