1. 程式人生 > 實用技巧 >自動新增windows 2012使用者,並在jump新增授權

自動新增windows 2012使用者,並在jump新增授權

#! /usr/bin/python env
# -*- coding: utf-8 -*-
# Author:cc
# date: 2020/8/19

import random,string,json,time,os,sys,requests,subprocess


def Usage():
    """
    定義一個用法事例
    :return:
    """
    print('eg: python ' + sys.argv[0] + ' cc 192.168.1.96')

class CreateWinUser:
    def __init__(self):
        self.user = user
        self.ip = ip
        self.password = password


    def create(self):
        """
        建立一個windows使用者,並授權
        :return:
        """
        try:
            cmd1 = 'salt %s user.add %s groups=\"Remote Desktop Users\"' %(self.ip, self.user)
            # cmd1 = subprocess.Popen(['salt %s user.add %s groups \"Remote Desktop Users\"' %(self.ip, self.user)], shell=True,
            #                 stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")
            cmd2 = 'salt %s user.update %s password=%s password_never_expires=ture' % (self.ip, self.user, self.password)
            # cmd2 = subprocess.Popen(['salt %s user.update %s password=%s password_never_expires=ture' % (self.ip, self.user, self.password)],
            #                  shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")
            res1 = os.system(cmd1)
            res2 = os.system(cmd2)
            if res1 !=0 or res2 !=0:
                print("建立Windows使用者失敗")
            else:
                print("建立Windows使用者成功")
        except Exception as e:
            print(e)

class Create_jump:
    def __init__(self):
        """
        初始化例項屬性
        """
        ##url
        self.url = url
        ##host
        self.jum_host = jum_host
        ##jumpserver token
        self.token = token
        ##建立系統使用者名稱稱
        self.name = name
        ##給哪個使用者授權
        self.username = username
        ##獲取windows 授權ip
        self.ip = ip
        ##定義建立系統使用者的密碼
        self.password = password
        ##請求頭
        self.headers = {
            "Authorization": "Token {0}".format(self.token)
        }

    def Create_assets_system_user(self):
        """
        建立系統使用者
        :return:
        """
        ##請求引數
        self.data = {
                    "name":self.name,
                    "login_mode":"auto",
                    "username":self.username,
                    "priority":"20",
                    "protocol":"rdp",
                    "password":self.password,
                    "auto_push":True,
                    "sudo":"/bin/whoami",
                    "shell":"/bin/bash",
                    "comment":"",
                    "cmd_filters":[

                    ],
                    "auto_generate_key":False
                }
        try:
            res = requests.post(
                                url=self.url,
                                headers=self.headers,
                                data=self.data
                                )
            if res.status_code in range(200,299):
                print(res.json())
                print("新增系統使用者成功")
                # print(self.data["id"])
            elif res.json()['name'][0] == "欄位必須唯一":
                print("系統使用者已經存在")
            else:
                print(res.json())
                print("{0}{1}".format("response status_code is not 200 ", res.json()['name']))
        except Exception as e:
            print(e)

    def Create_perms_asset_permissions(self):
        """
        拿到使用者的id,assets授權機器的id,system_users系統使用者的id
        :return:
        """
        # 使用者id
        self.user_id = ""
        # 授權機器id
        self.assets_id = ""
        # 系統使用者id
        self.system_users_id = ""

        try:
            res_user = requests.get(
                "{0}/api/v1/users/users/?search={1}&offset=0&limit=10".format(self.jum_host, self.username),
                headers=self.headers,
            )
            self.user_id = res_user.json()['results'][0]["id"]
            res_assets = requests.get(
                "{0}/api/v1/assets/assets/?node_id=70e51ef0-15a6-4871-a9f8-70da1bae6091&show_current_asset=null&draw=3"
                "&search={1}&limit=15&offset=0".format(self.jum_host, self.ip),
                headers=self.headers,
            )
            self.assets_id = res_assets.json()['results'][0]["id"]
            res_system_users = requests.get(
                "{0}/api/v1/assets/system-users/?draw=5&search={1}&limit=15&offset=0".format(self.jum_host, self.name),
                headers=self.headers,
            )
            self.system_users_id = res_system_users.json()['results'][0]["id"]
        except:
            print("系統使用者id或資產授權id獲取失敗")

        # 通過上面獲取的id,來給資產授權
        self.data = {
                "name": self.name,
                "users": [
                    self.user_id
                ],
                "assets": [
                    self.assets_id
                ],
                "system_users": [
                    self.system_users_id
                ],
                "actions": [
                    "all",
                    "connect",
                    "updownload",
                    "upload_file",
                    "download_file"
                ],
                "is_active": True,
                "date_start": "2020-08-19T07:04:00.000Z",
                "date_expired": "2090-08-02T07:04:00.000Z",
                "comment": "",
                "user_groups": [

                ],
                "nodes": [

                ]
        }

        try:
            res = requests.post(
                                url="{0}/api/v1/perms/asset-permissions/".format(self.jum_host),
                                headers=self.headers,
                                data=self.data
                                )
            if res.status_code in range(200,299):
                print(res.json())
                print("資產授權成功")
                # print(res.json()["id"])
            elif res.json()['name'][0] == "欄位必須唯一":
                print("資產授權規則已經存在")
            else:
                print("{0}{1}".format("response status_code is ", res.status_code))
        except Exception as e:
            print(e)



if __name__ == '__main__':
    try:
        user = sys.argv[1]
        ip = sys.argv[2]
        password = "qwer12#A"
        jum_host = "https://xxx"
        url = "https://xxx/api/v1/assets/system-users/"
        name = "Win-" + sys.argv[1]
        ##永久token,可在官網檢視生成方式
        token = "824a08ab6760c72f796e079cb52bdce18ae9fb64"
        username = sys.argv[1]
    except Exception as e:
        print(e)
    else:
        CreateWinUser_source = CreateWinUser()
        CreateWinUser_source.create()
        Create_jump_source = Create_jump()
        Create_jump_source.Create_assets_system_user()
        Create_jump_source.Create_perms_asset_permissions()