我正在尝试使用 Puppet 复制一个文件:
file{ '/root/.ssh/id_rsa' :
source => 'puppet:///modules/certs/.ssh/id_rsa',
}
权限是-r-------- 1 root root
。
如果我运行chmod +r
该文件,我的脚本可以工作,但由于上述权限,puppet 无法复制该文件。
错误:/Stage[main]/Main/Node[default]/File[/root/.ssh/id_rsa]:无法评估:无法检索 puppet:///modules/certs/.ssh/id_rsa 的文件元数据:服务器上的错误 500:服务器错误:权限被拒绝 - /etc/puppetlabs/code/environments/production/modules/certs/files/.ssh/id_rsa
我假设 puppet 将以 root 身份运行,因此能够复制文件。有没有办法在不更改权限的情况下做到这一点?
答案1
错误消息表明您正在使用主/代理设置。在这种设置中,Puppet 主服务器(或服务器)通常在用户下运行,puppet
因为它是一个仅提供文件和目录供下载的 Web 应用程序。
只有 Puppet 代理(在客户端上)将以 root 身份运行以对操作系统进行配置更改。
用户应该能够读取 Puppet Master 上的文件puppet
,方法是更改所有权:
chown puppet id_rsa
或授予组读取权限:
chgrp puppet id_rsa
chmod g+r id_rsa
或给予其他读取权限,就像你对 所做的那样chmod +r
。
请注意,对文件的访问有有限的授权控制。任何拥有有效 Puppet SSL 密钥/证书的主机都可以从 Puppet 主机下载文件,即使它们没有配置清单/文件。这不是一种非常安全的分发私钥的方法。