需求如下:

现有服务器a,b,c 三台;用户dev1,dev2,dev3属于dev组中,用户sa1,sa2,sa3属于wheel组;

用户dev1能登陆到服务器a,而dev2,dev3无法登陆,而wheel组成员均可登陆;

相同的服务器b只允许用户dev2和wheel成员登陆,服务器c只允许dev3和wheel成员登陆;

架构如下:

文件相关内容如下:

  1. 1,init.pp  

  2. class user {  

  3.        include user::adduser  

  4.        import "deluser.pp"  

  5. }  

  6. 2,adduser.pp  

  7. class user::adduser {  

  8.      @user {"dev1":    #dev2,dev3类似  

  9.             ensure  => present,  

  10.             shell   => "/bin/bash",  

  11.             tag     => ['dev'],  

  12.             groups  => dev,  

  13.             require => Group['dev'],  

  14.             managehome  => true,  

  15.             password => '$1$M05yB1$vG/M/Spm30cTHeuADYX2M/',  

  16.      }  

  17.      @user {"sa1":    #sa2,sa3类似  

  18.             ensure  => present,  

  19.             shell   => "/bin/bash",  

  20.             tag     => [''sa],  

  21.             groups  => dev,  

  22.             require => Group['wheel'],  

  23.             managehome  => true,  

  24.             password => '$1$M05yB1$vG/M/Spm30cTHeuADYX2M/',  

  25.      }  

  26.      group {"dev":  

  27.             ensure  => present,  

  28.      }  

  29. }  

  30. 3,deluser.pp

  31. define user::deluser (

  32.        $username

  33.        )

  34.        {

  35.          user {"$username":

  36.                ensure  => absent,

  37.        }

  38.          file {"/home/$username":

  39.                ensure  => absent,

  40.          }

  41. }

注意下,puppet也支持ssh密钥认证,可以去官网看下,这里还是用密码

密码创建的方式如下:grub-md5-crypt

使用方法如下:

  1. node 'server1' {

  2.        include user    

  3.        realize user['dev1']     ## 单独创建dev1

  4.        user::deluser{"userdel sa1":   ##删除sa1  

  5. username  => sa1,

  6.        }

  7.        User <| groups == wheel |>  ##创建所有wheel成员

  8. }

  9. 前提记得 还是要在modules.pp里面import "user"

github地址:https://github.com/vTNT/puppet-user  不定期更新 - -