如何通过Landscape向已加入域的Ubuntu客户端部署基于用户的CA证书
如何通过Landscape向已加入域的Ubuntu客户端部署基于用户的CA证书
嘿,我刚好在之前的项目里处理过类似需求,给你分享几个实用的方法,帮你通过Landscape把基于用户的CA证书部署到Ubuntu客户端上:
方法一:自定义脚本推送(最直接的方式)
Landscape支持批量推送Shell脚本到管理的客户端,这是快速实现的首选方案:
- 准备证书文件:先从安全团队拿到CA证书(确保是PEM格式,后缀一般是
.crt或.pem),你可以把它上传到Landscape的「资源库」,或者直接把证书文本内容嵌入脚本里。 - 编写安装脚本:写一段简单的Shell脚本,完成证书部署和信任库更新:
👉 提示:如果证书是直接嵌入脚本的,可以用# 创建用户专属证书目录(不存在则自动创建) mkdir -p ~/.local/share/ca-certificates/ # 从Landscape资源库下载证书到临时目录(如果上传了资源库的话) landscape-download-resource "enterprise-ca.crt" /tmp/ # 复制证书到用户证书目录 cp /tmp/enterprise-ca.crt ~/.local/share/ca-certificates/ # 更新用户级别的信任证书库 update-ca-certificates --userecho "证书内容" > ~/.local/share/ca-certificates/enterprise-ca.crt替代下载和复制步骤。 - 在Landscape执行脚本任务:
- 登录Landscape控制台,进入「脚本」页面创建新任务。
- 选择需要部署证书的客户端组,上传/粘贴脚本,设置执行上下文为用户级别(确保脚本以目标用户身份运行,避免安装到root目录)。
- 触发任务后,Landscape会自动把脚本推送到所有目标客户端执行。
方法二:配置管理工具集成(适合长期运维)
如果你的Landscape已经集成了Puppet、Chef这类配置管理工具,或者用了Landscape自带的配置模块,可以用这种更规范的方式:
- Puppet示例:编写一个Puppet清单,定义证书文件路径和更新命令:
然后在Landscape中触发Puppet强制运行,客户端会自动拉取并应用配置。file { "${home}/.local/share/ca-certificates/enterprise-ca.crt": ensure => present, source => "puppet:///modules/certs/enterprise-ca.crt", owner => $user, group => $user, mode => '0644', } exec { "update-user-ca-cert": command => "update-ca-certificates --user", subscribe => File["${home}/.local/share/ca-certificates/enterprise-ca.crt"], refreshonly => true, user => $user, } - Landscape自带配置管理:在「配置」页面添加「文件资源」,指定源文件为CA证书,目标路径为
~/.local/share/ca-certificates/enterprise-ca.crt;再添加「命令资源」执行update-ca-certificates --user,并设置依赖于前面的文件资源,确保证书更新后自动刷新信任库。
关键注意事项
- 证书格式检查:Ubuntu的
update-ca-certificates只识别PEM格式,如果是DER格式,先转成PEM:openssl x509 -inform der -in enterprise-ca.der -out enterprise-ca.crt。 - 用户级vs全局部署:如果要给所有用户部署,可把证书放到
/usr/local/share/ca-certificates/并运行update-ca-certificates(不带--user参数),但你需要的是基于用户的,所以坚持用用户目录更合适。 - 测试先行:先在单个客户端手动执行脚本,通过
certutil -L -d sql:$HOME/.pki/nssdb查看用户信任证书,确认成功后再批量推送,避免踩坑。
备注:内容来源于stack exchange,提问作者Karthick
相关产品推荐
相关产品推荐

