python多进程异步批量修改Linux服务器密码,并实时将结果以日志的形式输出到控制台终端

说明:

适用于大量服务器root密码各不相同的情况,密码相同的情况直接用ansible修改就可以了。
本博客hosts.csv文件中写的密码是相同的,使用时只需要准备好同样格式的csv文件即可。

1. 脚本(python2)

#!/usr/bin/env python
from multiprocessing import Process
from multiprocessing import Pool
from multiprocessing import Manager
import multiprocessing
import paramiko
import csv
import logging


hosts_file = "/root/hosts.csv"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(process)d %(message)s',datefmt='%Y-%m-%d %I:%M:%S %p')
# 设置日志格式以及日志级别
queue = Manager().Queue()
# 创建队列


def logger(queue):
    try:
        while True:
            #content = queue.get(block=True, timeout=30)
            content = queue.get()
            if content:
                level = content['level']
                message = content['message']
                if level == logging.INFO:
                    logging.info(message)
    except Exception,e:
        logging.info(str(e))

def send_log(queue, level, message):
    queue.put({"level": level, "message": message})


def change_password(record,queue):
    try:
        ssh.connect(hostname=record['hostname'], port=record['port'], username=record['user'], password=record['password'], allow_agent=False)
        stdin, stdout, stderr = ssh.exec_command("echo %s | passwd --stdin root" % record['new_password'])
        out = stdout.readlines()
        send_log(queue, logging.INFO, record['hostname'] + ": " + str(out))
    except Exception, e:
        send_log(queue, logging.INFO, record['hostname'] + ": " + str(out))



p = Process(target=logger, args=(queue,))
p.start()
# 首先启动日志输出的进程
pool = multiprocessing.Pool(processes=4)
# 定义进程池
with open(hosts_file) as f:
    content = csv.DictReader(f)
    for row in content:
        pool.apply_async(change_password, (row,queue))
        # 启动多进程异步修改密码
    pool.close()
    pool.join()

2. hosts.csv

hostname,port,user,password,new_password
10.1.20.53,22,root,abcdef,123456
10.1.20.74,22,root,abcdef,123456
10.1.20.85,22,root,abcdef,123456
10.1.20.102,22,root,abcdef,123456
10.1.20.111,22,root,abcdef,123456
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值