如何configuration木偶sudo模块中的参数,以取​​代客户端的sudoer?

我按照这个代码在puppet中configurationsudo模块

class sudo { package { sudo: ensure => present, } if $operatingsystem == "Ubuntu" { package { "sudo-ldap": ensure => present, require => Package["sudo"], } } file { "/etc/sudoers": owner => "root", group => "root", mode => 0440, source => "puppet://$puppetserver/modules/sudo/etc/sudoers", replace => true, require => Package["sudo"], } } 

并得到以下错误:

如果您已经安排了其他方式来访问root帐户,并且您确定这是您想要的,您可以通过设置环境variables(导出SUDO_FORCE_REMOVE = yes)来绕过此检查。

什么参数,我应该把它放到代码中,以使sudo命令只需要ssh-key而不需要询问密码。

任何build议,将不胜感激。

您收到的错误消息表明,通过安装sudo-ldap ,dpkg正在删除sudo ,并且删除脚本正试图警告您,这可能会使您处于无根访问状态。

您不能从Puppet为dpkg设置一个环境variables,所以您需要启动已经设置环境的Puppet代理(可能从/etc/default/puppet导出或类似的初始化脚本)。

你在下面问的问题与sudo本身有关,可能通过在/etc/sudoers文件中使用NOPASSWD选项来满足:

 username ALL=(ALL) NOPASSWD: ALL 

这允许“用户名”sudo任何用户,运行任何命令没有密码。 在这个阶段没有检查SSH密钥(这是没有意义的),但用户可以用SSH密钥连接到系统。

这是行不通的,这意味着每个木偶都会运行,木偶会删除sudo-ldap并尝试安装sudo,然后再次安装sudo-ldap。

'export SUDO_FORCE_REMOVE = yes'部分是通过使用export语句创build一个可执行文件并使用exec运行来修复的:

 > ... > if $ldap { > file { > '/tmp/delsudo.sh': > ensure => present, > mode => '0700', > content => 'export SUDO_FORCE_REMOVE=yes'; > } -> > exec { '/tmp/delsudo.sh': > logoutput => on_failure; > } > ...