【问题标题】:Puppet: "puppet agent --test" on client machines. I'm not able to do ssh on master & client machinesPuppet:客户端机器上的“puppet agent --test”。我无法在主机和客户端机器上执行 ssh
【发布时间】:2021-10-02 06:14:47
【问题描述】:

#/etc/puppetlabs/code/environments/production/modules/mymodule/manifests/init.pp

class mymodule {

file { "/bin/extend_shutdown.sh":
    mode => "0644",
    owner => 'root',
    group => 'root',
    source => 'puppet:///modules/mymodule/extend_shutdown.sh',
}

file { "/bin/server_shutdown.sh":
   mode =>"777",
   owner =>'root',
   group => 'root',
   source => 'puppet:///modules/mymodule/server_shutdown.sh',
 }
file { "/bin/user_activity.sh":
   mode =>"777",
   owner =>'root',
   group => 'root',
   source => 'puppet:///modules/mymodule/user_activity.sh',
 }
file { "/bin/new_cron.sh":
   mode =>"777",
   owner =>'root',
   group =>'root',
   source => 'puppet:///modules/mymodule/new_cron.sh',
 }

 file { "/home/azureuser/shutdown.sh":
   mode =>"777",
   owner =>'root',
   group =>'root',
   source => 'puppet:///modules/mymodule/shutdown.sh',
}
file { "/bin/tag.sh":
   mode => "777",
   owner => 'root',
   group => 'root',
   source =>'puppet:///modules/mymodule/tag.sh',
 }
 #file { "/etc/profile":
   #mode => "777",
   #owner => 'root',
   # group => 'root',
   #  source =>'puppet:///modules/mymodule/profile',
 # }
  file { "/etc/.bash_aliases":
   mode => "777",
   owner => 'root',
   group => 'root',
   source =>'puppet:///modules/mymodule/.bash_aliases',
 }
 #file { "/etc/profile.d/alias.sh":
 #      mode => "777",
 #     owner =>'root',
 #    group =>'root',
 #   source => 'puppet:///modules/mymodule/alias.sh',
 # }
 file { "/bin/max_timetrack.sh":
   mode => "777",
   owner =>'root',
   group => 'root',
   source => 'puppet:///modules/mymodule/max_timetrack.sh',

 }
}

  

#azureuser@disk-bkp:/rescue/etc/puppetlabs/code/environments/production/manifests$ cat site.pp

 node default {
    include  mymodule

    cron {'user_tracking':
        ensure  => 'present',
           command => 'bash /bin/user_activity.sh',
           hour    => ['*'],
           minute  => ['30'],
           user    => 'root',
    }
    #cron {'shutdown1':
    #    ensure  =>'present',
     #   command => 'bash /bin/server_shutdown.sh',
      #  hour    => ['*'],
       # minute  => ['*/15'],
       # user    => 'azureuser',
    #}
    cron {'new_cron':
       ensure  => 'present',
       command => 'bash /bin/new_cron.sh',
       hour    => ['*'],
       minute  => ['*'],
       user    => 'root',
    }

    exec {'shutdown_running_status':
      command => 'cat /var/log/syslog | grep server_shutdown.sh',
      provider => shell,
    }

    exec { 'reconfigure_cron':
      command => 'bash  /home/azureuser/test.sh',
      provider   => shell,
    }
    exec {'input.log':
       command  => 'user=`whoami`;sudo touch /usr/bin/input_${user}.log ; sudo chmod 777 /usr/bin/input_${user}.log',
       provider => shell,

   }
   exec {'profile':
        command => 'echo "source /etc/.bash_aliases" >> /etc/bash.bashrc',
        path     => [ '/bin', '/sbin' , '/usr/bin', '/usr/sbin' ],
        provider => 'shell',
        unless => 'cat /etc/bash.bashrc |grep -i /etc/.bash_aliases',
   }
   exec {'getting_tag':
        command => 'sudo bash /bin/tag.sh',
        path     => [ '/bin', '/sbin' , '/usr/bin', '/usr/sbin' ],
        provider => 'shell',
   }
    exec {'folder_creation':
        command => 'sudo mkdir /pg',
        path     => [ '/bin', '/sbin' , '/usr/bin', '/usr/sbin' ],
        provider => 'shell',
        unless => 'ls -ld /pg',
   }
   exec {'deleting_log_file':
        command => 'sudo cd /pg/; sudo rm  *',
        path     => [ '/bin', '/sbin' , '/usr/bin', '/usr/sbin' ],
        provider => 'shell',
   }

}

在客户端机器上执行puppet agent --test 后,客户端和主服务器可以正常工作一到两个小时,然后它们就会中断。看起来/bin 文件夹正在被删除。我收到此错误:

错误:ubuntu@18.222.8.217:权限被拒绝(公钥)

我在多台机器上尝试过相同的代码,但所有机器都处于相同状态。我的代码有什么问题?

【问题讨论】:

    标签: puppet


    【解决方案1】:

    问题似乎是这样的:

    exec {'deleting_log_file':
         command => 'sudo cd /pg/; sudo rm  *',
         path     => [ '/bin', '/sbin' , '/usr/bin', '/usr/sbin' ],
         provider => 'shell',
    }
    

    通过sudo执行cd命令不会影响宿主shell的工作目录,所以后面的rm *会以当时Puppet代理的工作目录运行。那不太可能是/pg,因此您要求 Puppet 删除与您预期不同的文件。被删除的文件可能是/bin 的内容。


    您多次做出错误的决定,一枪打死了自己。首先,使用Tidy 资源可能会比使用Exec 滚动自己的资源更好:

    tidy { 'Clean out /pg':
      path    => '/pg',
      age     => 0,
      recurse => true,
      rmdirs  => false,
    }
    

    但是请注意,如果 /pg 有子目录(这可能会或可能不会反映您的版本中的另一个缺陷),其效果与您原来的效果不同。

    如果选择了Exec,则无需在命令中引入sudo。如果代理完全可以执行请求的操作,那么它不需要sudo 来执行它,因为它首先会以特权运行。如果 Puppet 在没有特权的情况下运行,那么 sudo 将无济于事,因为 Puppet 不会提供密码。如果该命令只是 cd /pg; rm *,那么它更有可能起作用。

    选择了Exec,也没有必要通过两个命令的组合来表达想要的操作。改用rm /pg/* 会更简单、更清晰、更安全。这消除了由于cd 失败或无效而导致错误文件被删除的任何风险。这里的一般原则是首选绝对路径。

    因此,如果您坚持使用Exec,那么这样会更好:

    exec {'deleting_log_file':
      command  => '/bin/rm /pg/*',
      provider => 'shell',
    }
    

    总体而言,您的代码相当不习惯。 Puppet 不是脚本引擎,不应将 Puppet 清单视为或构建为脚本类似物。除此之外,使用Execs 应该被认为是在粗略的破解和最后的手段之间的某个地方,并且基本上所有代码都应该在模块的类中,而不是直接在节点块中。

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多