SaltStack与Python配合实现系统用户自动化管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack与Python配合实现系统用户自动化管理相关的知识,希望对你有一定的参考价值。

背景需求:

  随意业务的发展,服务器数据也是越来越多,开发人员,运维人员也是越来越多。这时候如果有大量的人需要登录到服务器的话,那么我们就很有必要对用户进行管理。传统的方式是登录到每台服务器创建一个用户,工作重复性太大,如果有 1000台怎么办?甚至有的公司用户都不创建直接让所有人以root登录,这样更危险!!!,那么聪明一点的运维人员会写个创建用户的脚本来实现半自动化的创建用户。这些方法都不适合管理大批量的机器,接下来给大家带来其于SaltStack和Python脚本实现的自动化用户管理。

实现目标:

  1. 不可以使用root直接远程登录服务器

  2. 不可以使用密码登录服务器(只能密钥)

  3. 通过简单的命令就能自动化的创建用户,并且将用户密钥发送到用户目录下,使用户可以密钥登录,并且拥有sudo权限


关salt的使用可以查看我以前发表的几篇文章《Salt安装,基本命令使用》,《Salt远程执行模拟的使用》,《Target的介绍》,《Salt配置管理系统》。关于Python的使用请自行学习

目前对于如何实现批量禁用root远程登录和禁用密码登录占未研究,所以需要大家自行修改。另外还需要创建一个或者多个具有不同权限的sudo用户组


完成上面的操作和学再继续看下面的实现方法:

/srv/salt/test:是我们salt的test环境根目录

目录结构如下:

user_managent/
├── files
│   └── user-authorized_keys
└── useradd.sls
#files目录存放所有用户的公钥文件,命名规则为USERNAME-authorized_keys

状态配置文件如下:useradd.sls

#下面两行是定义用户名和密码,密码是以用户名通过加密算法产生的, 所以用户密码和用户名一样
{% set USERNAME = ‘user‘ %}
{% set PASSWORD = ‘$6$i6qujzCmWYsXGDJ0$Mxo50GGqCNMI3AKReNXKZ3GGxhFLzrZSQRxuFChw9JX/QrIdIIjqqkM52A7tEKOb61OuXmV7IrvtNWbzVgt000‘ %}

#以下为创建用户的模块,需要注意的是groups,指定用户的附加组,此组需要有sudo权限
create user:
  user.present:
    - name: {{USERNAME}}
    - password: {{PASSWORD}}
    - groups:
      - aek

#创建.ssh目录
create dir:
  file.directory:
    - name: /home/{{USERNAME}}/.ssh
    - user: {{USERNAME}}
    - group: {{USERNAME}}
    - mode: 700
    - template: jinja

#复制密钥文件
pub key:
  file.managed:
    - name: /home/{{USERNAME}}/.ssh/authorized_keys
    - source: salt://user_managent/files/{{USERNAME}}-authorized_keys
    - user: {{USERNAME}}
    - group: {{USERNAME}}
    - mode: 600

Python脚本:

#!/usr/bin/python
#coding:utf:8

import sys
import fileinput
import crypt
import re

class UserAdd:
    #此脚本会自动修改salt状态配置文件里面的用户和密码

    def __init__(self, username=sys.argv[1]):
        self.username = username

    #根据用户名生成加密码后的密码
    def password(self):
        self.password = crypt.crypt(self.username)    
        return self.password

    #修改state配置文件里面的用户名和密码变量
    def modifyStateFile(self):
        password = self.password()
        for i in fileinput.input("/srv/salt/test/user_managent/useradd.sls", inplace=True):
            if "USERNAME = " in i:
                print(re.sub(r"USERNAME = ‘.*?‘", "USERNAME = ‘"+self.username+"‘", i).rstrip())
            elif "PASSWORD = " in i:
                print(re.sub(r"PASSWORD = ‘.*?‘", "PASSWORD = ‘"+password+"‘", i).rstrip())
            else:
                print(i).rstrip()

if __name__ == "__main__":
    a = UserAdd()
    a.modifyStateFile()

Python脚本使用方法:

#如果你的状态文件存放位置与我不一样,或者名称不一样,请自行修改
chmod +x useradd.py
./useradd.py USERNAME

当执行完成Python脚本后接下来我们就可以执行Salt命令创建用户了,命令如下:

salt -G "os:CentOS" state.sls user_managent.useradd saltenv=test

最后你需要的就是等待完成就可以了

本文出自 “蓝色_风暴” 博客,请务必保留此出处http://270142877.blog.51cto.com/12869137/1953645

以上是关于SaltStack与Python配合实现系统用户自动化管理的主要内容,如果未能解决你的问题,请参考以下文章

集中化管理平台saltstack——自动化实现apache的安装与配置

SaltStack 与 Python 程序的结合

Saltstack的API接口与调用方式

SSH开发 | 配合自定义注解 和 Stratus拦截器,实现 方法级粒度 用户鉴权

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 之 自定义系统消息和总结

saltstack部署LAMP架构