如何使用puppet将文件复制到所有客户端?
如何使用puppet将文件复制到所有客户端? 我已经设置了一个木偶服务器和客户端,我已经测试了正常工作的连接。 我不是木偶专家,我只是一个初学者,我只想知道如何从puppet服务器将文件复制到所有客户端? 我也想知道如何删除文件?
Puppet文件服务器
本指南介绍了Puppet文件服务function的使用。
木偶主服务包括用于传输静态文件的文件服务器。 如果文件资源声明在其source属性中包含puppet:URI,则节点将从主文件服务器中检索该文件:
#将远程文件复制到/ etc / sudoers file {“/ etc / sudoers”: mode => 440, owner => root, group => root, source =>“puppet:/// modules / module_name / sudoers” }
所有puppet文件服务器URI的结构如下:
puppet://{server hostname (optional)}/{mount point}/{remainder of path}
如果省略服务器主机名(即puppet:///{mount point}/{path}
;请注意三次斜杠),URI将解析为评估节点认为是其主服务器的任何服务器。 由于这使得清单代码更具可移植性和可重用性,因此应尽可能省略主机名。
puppet的其余部分:URI以两种方式之一映射到服务器的文件系统,具体取决于文件是由module
提供还是通过custom mount point
公开。
服务模块文件
由于绝大多数文件服务应该通过模块完成,因此Puppet文件服务器提供了一个称为模块的特殊和半魔法挂载点,默认情况下可用。 如果URI的挂载点是模块,Puppet将:
- 将路径的下一段解释为模块的名称…
- …在服务器的模块路径中找到该模块(如“模块查找”中所述…
- …并解析从该模块的files /目录开始的路径的其余部分。
-
也就是说,如果名为test_module的模块安装在中央服务器的
/etc/puppet/modules
目录中,则以下puppet:URI …puppet:///modules/test_module/testfile.txt
…将解析为以下绝对路径:
/etc/puppet/modules/test_module/files/testfile.txt
如果
test_module
安装在/usr/share/puppet/modules
,则相同的URI将解析为:/usr/share/puppet/modules/test_module/files/testfile.txt
虽然使用模块安装点不需要其他配置,但可以通过添加[modules]
配置块在文件服务器配置中指定一些访问控制。 见安全。
从自定义挂载点提供文件
Puppet还可以从服务器文件服务器配置中指定的任意挂载点提供文件(参见下文)。 从自定义安装点提供文件时,Puppet不会执行模块安装中使用的额外URI抽象,并将安装名称后的路径解析为简单的目录结构。
文件服务器配置
文件服务器配置数据的默认位置是/etc/puppet/fileserver.conf
; 这可以通过将--fsconfig
标志传递给puppet master来更改。
fileserver.conf
文件的格式几乎与rsync
的格式完全相同,大致类似于INI文件:
[mount_point] path /path/to/files allow *.domain.com deny *.wireless.domain.com
当前可以为给定的挂载点指定以下选项:
- 磁盘上挂载位置的路径
- 任意数量的allow指令
- 任意数量的拒绝指令
path是唯一必需的选项,但由于默认安全配置是拒绝所有访问,因此任何节点都无法使用没有allow指令的安装点。
该路径可以包含%h
, %H
和%d
任何一个或全部,它们分别由客户端的主机名,完全限定的域名和域名动态替换。 所有这些都取自客户端的SSL证书(如果您的主机名/证书名称不匹配,请小心)。 这在创建模块时非常有用,其中每个客户端的文件完全分开保存,例如私有ssh主机密钥。 例如,配置
[private] path /data/private/%h allow *
来自客户端client1.example.com的文件/private/file.txt
请求将查找文件/data/private/client1/file.txt
,而来自client2.example.com
的相同请求将尝试检索文件/文件服务器上的data / private / client2 / file.txt。
当前路径不能包含尾部斜杠,否则将导致错误。 另外请注意,在puppet.conf
您没有指定具有尾部斜杠的目录位置。
安全
保护Puppet文件服务器包括允许和拒绝每个安装点的访问(以不同的特定级别)。 可以通过三种方式识别节点组的权限或拒绝:按IP地址,按名称或通过单个全局通配符(*)。 自定义安装点默认拒绝所有访问。
除了自定义安装点之外,还有两个可以使用fileserver.conf
管理的特殊安装点: modules
和plugins
。 这些挂载点都不应指定路径选项。 上面的“从自定义挂载点服务文件”中描述了模块挂载点的行为。 插件挂载不是真正的挂载点,而是一个允许fileserver.conf指定允许哪些节点从Puppet Master同步插件的挂钩。 默认情况下,这两个挂载点都存在,并且两者都默认允许所有访问; 如果为这些特殊安装之一设置了任何allow或deny指令,则其安全设置将与普通安装的行为相同(即,它将默认拒绝所有访问)。 请注意,这些是deny *不冗余的唯一挂载点。
如果节点没有直接连接到Puppet文件服务器,例如使用反向代理和Mongrel(请参阅使用Mongrel),则文件服务器将看到所有连接来自代理服务器的IP地址而不是Puppet Agent节点的IP地址。 在这种情况下,最好根据主机名限制访问。 此外,需要允许充当反向代理(通常为127.0.0.0/8)的机器访问适用的安装点。
优先
更具体的deny和allow语句优先于不太具体的语句; 也就是说,node.domain.com的allow语句会让它连接,尽管* .domain.com的拒绝声明。 在给定的特异性级别,拒绝语句优先于allow语句。
将IP地址指令与主机名和域名指令混合可能会导致不可预测的行为,因此请尽量避免这样做。 (目前,如果node.domain.com的IP地址为192.168.1.80且fileserver.conf包含allow 192.168.1.80并拒绝node.domain.com,则基于IP的allow指令实际上将优先。此行为可能会在未来,不应该依赖。)
主机名
可以使用完整主机名指定主机名,也可以使用*通配符指定整个域:
[export] path /export allow host.domain1.com allow *.domain2.com deny badhost.domain2.com
IP地址
可以使用完整的IP地址或通配地址,与主机名类似地指定IP地址。 您还可以使用CIDR样式表示法:
[export] path /export allow 127.0.0.1 allow 192.168.0.* allow 192.168.1.0/24
全球允许
指定单个通配符将允许任何节点访问装入点:
[export] path /export allow *
请注意,自定义安装点的默认行为等同于deny *。