如何用Puppet模块注释sshd_config中所有未注释行?
用Puppet注释sshd_config中所有未注释行的实现方案
方案一:使用Puppet原生file_line资源(推荐)
Puppet的file_line资源专门用于处理文件单行内容,符合配置管理的幂等性要求,是更规范的做法。你可以通过匹配所有非注释、非空的行,将它们替换为带#注释的版本:
file_line { 'comment_all_uncommented_sshd_lines': path => '/etc/ssh/sshd_config', match => '^[^#\s]', replace => true, line => '#\0', }
match => '^[^#\s]':匹配以非#、非空白字符开头的行(即未注释的有效配置行)line => '#\0':给匹配到的行前添加#,\0代表匹配到的整行内容- 该配置会确保每次运行Puppet时,所有符合条件的行都会被注释,且不会重复注释已带
#的行
方案二:通过exec执行sed命令(可选)
如果一定要用bash命令,也可以通过Puppet的exec资源调用sed,但必须处理幂等性,避免每次运行Puppet都重复执行注释操作:
exec { 'comment_sshd_config_uncommented_lines': command => 'sed -i.bak \'/^[^#\s]/s/^/#/\' /etc/ssh/sshd_config', path => ['/usr/bin', '/bin'], unless => 'grep -q "^[^#\s]" /etc/ssh/sshd_config', }
command中的sed命令会给所有非注释非空行开头加#,同时生成.bak备份文件unless条件会先检查文件中是否还有未注释的有效行,只有存在时才执行sed操作,保证幂等性- 这种方式要注意sed的语法兼容性(不同系统的sed参数可能有差异),且不如原生资源直观
方案对比
- 优先选
file_line:符合Puppet的配置管理理念,易维护、无兼容性问题,天然保证幂等 exec方式适合临时需求,但需要自己处理幂等和跨系统兼容问题,不推荐作为长期配置
内容的提问来源于stack exchange,提问作者anonymous user
相关产品推荐
相关产品推荐

