Python自动批量修改服务器密码

工作中,我们经常会定期更换服务器密码,如果手动去修改,不仅费时,而且容易出错。下面提供了一种思路,可以实现批量、自动修改服务器密码。

大致思路:首先,为每一台服务器设定一个唯一标识;其次,将每台服务器的唯一标识、新密码、修改指令等信息存入专门的密码服务器;最后,每台服务器定时去查询密码服务器中的信息,收到修改指令后,自行修改密码。

1、设定服务器唯一标识

每一台服务器都需要一个唯一标识,便于查找、定位。不要使用IP地址、MAC地址,因为一台服务器可能有多个IP,多个网卡,IP地址也可能经常换来换去,这样就不准确。这里我使用了CUPID+ 主板序列号的组合作为唯一标识。我们测试了30多台服务器,发现这个组合可以满足需要。当然,也有其他的方法,如给每台服务器设置配置文件等。下面是获取硬件信息的方法:

def get_disk_info():
    encrypt_str = ""
    c = wmi.WMI()
    for cpu in c.Win32_Processor():
        # 获取CPUID
        encrypt_str = encrypt_str + cpu.ProcessorId.strip()
    for board_id in c.Win32_BaseBoard():
        # 主板序列号
        encrypt_str = encrypt_str + board_id.SerialNumber.strip()

    return encrypt_str

2、设定新密码

在数据库中维护服务器唯一标识,新密码,更新状态,指令等信息。为了安全起见,新密码可以使用密文,当需要修改的时候,把密文转换成明文。建议使用非对称加密算法,并增加密码的复杂度。如果使用主流的一些算法,如MD5等,对于简单的密码还是有办法可以破解的。也可以将新密码分成几部分,使用的时候再进行拼接或者特殊处理。这些做法都是尽可能的提高密码的安全性。

3、修改密码

每台服务器定时去检测密码服务器上的指令,如果需要修改,则立即修改,并更新修改状态等。

def changepwd():
    # 获取唯一标识
    cupid = get_disk_info()
    # 获取修改指令及新密码
    prow = getpwd(cupid)
    if len(prow) > 0:
        pnew = prow[0].get("newpwd")
        puser = getpass.getuser()
        cmd = "net user "+puser+" "+pnew
        # 修改密码
        res = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        recode = str(res.returncode)
        # 更新状态
        if "0" == recode:
            sql = "update autopwd set flag='0'  where sid=\'%s\'" % (pnew, cupid)
            setpwd(sql)
        log("change password status", str(res.returncode))
    else:
        log("change failed", "not find cpuid")
        sys.exit(0)

 

本案例中,修改密码命令是Windows的net命令,如果是Linux服务器,只需把对应的命令换成对应的Linux下的即可。以后运维人员,只需制定好新的密码、修改指令、修改时间,其余的均自动完成。

 

posted @ 2022-03-28 09:09  iceriver315  阅读(673)  评论(0编辑  收藏  举报