Python 编写多进程远程执行命令脚本

Python 编写多进程远程执行命令脚本

	以多进程的方式远程到列出的主机,在所有的列出的主机上执行相同的命令。
	需要提前配置被远程的主机密码要一致,也可以适当修改代码和配置免密登录被远程的主机

环境

	管理主机: CentOS系统,		IP:192.168.1.5
	若干被远程主机:CentOS系统,
	网络: 所有主机在同一局域网
	脚本名称:mycmd.py

需要 单独建立 一个文本文件,写入要操作的远程主机,以/root/hosts.txt 为例

	192.168.1.100
	192.168.1.105
	192.168.1.110
	192.168.1.200
	192.168.1.205

运行方式

	python  mycmd.py  /root/hosts.txt   "命令内容,以;分隔写多条”

Python代码

#!/usr/bin/python

import paramiko
import sys
# import os
import threading
import getpass


def mycmd(host, user='root', passwd=None, port=22, command=None):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, username=user, password=passwd, port=port)
    stdin, stdout, stderr = ssh.exec_command(command)
    out = stdout.read()
    err = stderr.read()
    if out :
        print('[%s] OUT:\n%s' %(host, out.decode()))
    if err :
        print('[%s] ERR:\n\033[31;2m%s\033[0m' %(host, err.decode()))

    ssh.close()


if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('Usage: %s ipfile "commamds" ' % sys.argv[0])
        exit(2)

    ipfile = sys.argv[1]
    commands = sys.argv[2]

    print('Passwd:')
    password = getpass.getpass()

    with open(ipfile) as fobj :
        for line in fobj:
            ip = line.strip()
            t = threading.Thread(target=mycmd, args=(ip,), kwargs={'passwd':password, 'command':commands})
            t.start()

你可能感兴趣的:(Python,多进程,批量执行)