如何使用p将文件复制到所有客户端?


8

如何使用p将文件复制到所有客户端?我已经设置了一个server服务器和客户端,并且已经测试了连接正常。我不是木偶专家,我只是初学者,我只想知道如何将文件从木偶服务器复制到所有客户端?我也想知道如何删除文件?


1
在Jorge的聊天室中:docs.puppetlabs.com/guides/file_serving.html将链接复制为答案。
Rinzwind'9

Answers:


8

木偶文件服务器

本指南介绍了Puppet的文件服务功能的使用。


人偶主服务包括用于传输静态文件的文件服务器。如果文件资源声明的source属性中包含puppet:URI,则节点将从主服务器的文件服务器中检索该文件:

#复制一个远程文件到/ etc / sudoers
文件{“ / etc / sudoers”:
    模式=> 440,
    所有者=>根,
    组=>根,
    来源=>“人偶:/// modules / module_name / sudoers”
}

所有p文件服务器URI的结构如下:

puppet://{server hostname (optional)}/{mount point}/{remainder of path}

如果省略服务器主机名(即puppet:///{mount point}/{path}注意三斜杠),则URI将解析到评估节点认为是其主服务器的任何服务器。由于这使清单代码更可移植和可重用,因此应尽可能省略主机名。

其余部分:URI以两种方式之一映射到服务器的文件系统,具体取决于文件是由a提供module还是通过a公开custom mount point

服务模块文件

由于绝大多数文件服务都应通过模块完成,因此Puppet文件服务器提供了一个称为模块的特殊半魔术挂载点,默认情况下可用。如果URI的安装点是modules,Puppet将:

  • 将路径的下一段解释为模块的名称…
  • ...在服务器的模块路径中找到该模块(如“模块查找”下所述)。
  • ...并从该模块的files /目录中解析路径的其余部分。
  • 也就是说,如果在中央服务器的/etc/puppet/modules目录中安装了名为test_module的模块,则会出现以下伪信息: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标志传递给人偶主来更改此设置。

fileserver.conf文件的格式几乎与的格式完全相同rsync,并且大致类似于INI文件:

[mount_point]
    path /path/to/files
    allow *.domain.com
    deny *.wireless.domain.com

当前可以为给定的安装点指定以下选项:

  • 磁盘上安装位置的路径
  • 任意数量的allow指令
  • 任意数量的拒绝指令

path是唯一必需的选项,但是由于默认的安全配置是拒绝所有访问,因此没有允许指令的安装点将对任何节点都不可用。

路径可以包含,和中的任何一个或全部%h,分别由客户端的主机名,其完全限定的域名和其域名动态替换。全部取自客户端的SSL证书(因此,如果主机名/证书名不匹配,请当心)。这在创建模块时非常有用,在该模块中,每个客户端的文件都完全分开保存,例如私有ssh主机密钥。例如,使用配置%H%d

[private]
   path /data/private/%h
   allow *

/private/file.txt来自客户端client1.example.com的文件请求将查找文件/data/private/client1/file.txt,而来自客户端的相同请求client2.example.com将尝试在文件服务器上检索文件/data/private/client2/file.txt。

当前路径中不能包含斜杠,否则将导致错误。还请注意,puppet.conf不要指定带有斜杠的目录位置。

安全

保护Puppet文件服务器包括对每个安装点的允许和拒绝访问(以不同的特异性级别)。可以通过三种方式将节点组标识为允许或拒绝:通过IP地址,名称或单个全局通配符(*)。自定义安装点默认为拒绝所有访问。

除了自定义挂载点外,还有两个特殊的挂载点可以使用fileserver.confmodules和进行管理plugins。这些安装点均未指定路径选项。上面的“从自定义安装点提供文件”中介绍了模块安装点的行为。插件安装不是真正的安装点,而是一个钩子,用于允许fileserver.conf指定允许哪些节点同步来自Puppet Master的插件。这两个挂载点默认情况下都存在,并且都默认允许所有访问。如果为这些特殊安装之一设置了任何allow或deny指令,则其安全设置的行为将与普通安装相同(即默认拒绝所有访问)。请注意,这些是拒绝*并非多余的唯一安装点。

如果节点未直接连接到Puppet文件服务器,例如使用反向代理和Mongrel(请参阅使用Mongrel),则文件服务器将看到所有连接均来自代理服务器的IP地址,而不是Puppet Agent节点的IP地址。 。在这种情况下,最好根据主机名限制访问。此外,将需要允许充当反向代理的机器(通常为127.0.0.0/8)访问适用的安装点。

优先

更具体的拒绝和允许语句优先于较不具体的语句;也就是说,尽管对* .domain.com的拒绝声明,对node.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 *

请注意,自定义安装点的默认行为等效于拒绝*。


嗨@Rinzwind,如果您添加我想要的确切答案,那将很好。
karthick87

好吧,来自Jorge /这个答案的链接是完成此任务的开始,它回答了以下问题:“如何使用using将文件复制到所有客户端?” 包括您应考虑的安全性。它所缺少的只是一种删除文件的方法。我将包括在内(此答案的最后一点是更多关于安全地执行操作,可能最好将其删除)。
Rinzwind'9

我要编辑清单文件吗?并输入以上行?
karthick87
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.