python开发文件管理工具_Python实现主机批量管理工具!

1、文件定义待管理目标主机

文件分为3列,第一列为目标主机IP地址,第二列为目标主机ssh服务端口,第3列为口令(也可以采用getpass()手工输入口令的方式实现),示例如下:

进群:960410445 即可获取数十套PDF!

[root@bahrain test]# cat example.ips

10.235.1.67 22 ~!@#$%^&*

10.235.1.68 22 !@#$%^&*

10.235.1.69 22 !@#@$%^&

2、使用方法

[root@bahrain test]# ./batchcommand.py example.ips "uptime"

************************************************************************************************************************

[HOST:10.200.161.67] [COMMAND:uptime Sucesses]

RESULT:

15:03:09 up 10 days, 4:42, 2 users, load average: 0.46, 0.48, 0.26

************************************************************************************************************************

************************************************************************************************************************

[HOST:10.200.161.68] [COMMAND:uptime Sucesses]

RESULT:

15:03:03 up 12 days, 17:41, 1 user, load average: 0.00, 0.03, 0.05

************************************************************************************************************************

************************************************************************************************************************

[HOST:10.200.161.69] [COMMAND:uptime Sucesses]

RESULT:

15:03:03 up 12 days, 17:29, 1 user, load average: 0.02, 0.04, 0.05

************************************************************************************************************************

[root@bahrain test]# ./batchcommand.py example.ips "pvs"

************************************************************************************************************************

[HOST:10.200.161.67] [COMMAND:pvs Sucesses]

RESULT:

PV VG Fmt Attr PSize PFree

/dev/sda2 system lvm2 a-- 119.70g 47.70g

************************************************************************************************************************

************************************************************************************************************************

[HOST:10.200.161.68] [COMMAND:pvs Sucesses]

RESULT:

PV VG Fmt Attr PSize PFree

/dev/sda2 system lvm2 a-- 119.70g 47.70g

************************************************************************************************************************

************************************************************************************************************************

[HOST:10.200.161.69] [COMMAND:pvs Sucesses]

RESULT:

PV VG Fmt Attr PSize PFree

/dev/sda2 system lvm2 a-- 119.70g 47.70g

************************************************************************************************************************

3、源代码如下

import getpass

import paramiko

import os

import sys

import threading

import logging

def remote_comm(host,port,pwd,command):

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=host,port=port,username='root',password=pwd)

if command =='':

print('*'*120)

print('No command to run ')

print('*'*120)

else:

stdin,stdout,stderr = ssh.exec_command(command)

out = stdout.read().decode(encoding='utf-8')

err = stderr.read().decode(encoding='utf-8')

if out:

print('*'*120)

print('[HOST:%s]'%host,'[COMMAND:%s Sucesses]'%command,sep=' ')

print('RESULT:',out,sep=' ',end='')

print('*'*120)

if err:

print('*'*120)

print('[HOST:%s]'%host,'[COMMAND:%s Error]'%command,sep=' ')

print('RESULT IS',err,sep=' ',end='')

print('*'*120)

if not err and not out:

print('*'*120)

print('[HOST:%s]'%host,'[COMMAND:%s Ok]'%command,sep=' ')

print('RESULT IS','Null',sep=' ',end=' ')

print('*'*120)

ssh.close()

if __name__ == '__main__':

if len(sys.argv) !=3:

print('Usage:%s ipaddr_file command' % sys.argv(0))

exit(1)

if not os.path.isfile(sys.argv[1]):

print('No Such file:',sys.argv[1])

exit(2)

filename = sys.argv[1]

command = sys.argv[2]

ips = []

pwd = []

port = [ ]

with open(filename,'r') as f:

for line in f:

ips.append(line.split()[0])

port.append(line.split()[1])

pwd.append(line.split()[2])

f.close()

for ip,port,pwd in zip(ips,port,pwd):

th = threading.Thread(target=remote_comm,args=(ip,port,pwd,command))

th.start()

th.join()

实现了与ansible 中command模块类似的功能,优点是小巧、灵活、能够快速使用,缺点是尚不支持交互式动作,只适合做一次性操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值