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代码
import paramiko
import sys
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()