前言:
当我们在测试或运维的时候如果想要使其多条主机同时执行相同的命令的时候,我们以前得办法是
分别登录这些主机,执行命令。如果主机多的时候,将会消耗大量的时间 ,不利于我们的批量管理。
思路:
如何通过脚本,多线程一起连接这些主机,并同时下发命令?,且可以执行多条命令,在此,我利用python
的paramiko模块实现了此简单的功能
脚本的运行环境:
python 3.0以上,(可以修改下代码,2.x也可以运行),由于paramiko模块不是python 的标准库,所以
要自行安装,
脚本的代码:
1 #-*- coding: utf-8 -*- 2 #!/usr/bin/python 3 import paramiko 4 import threading 5 from time import sleep 6 7 8 def ssh2(ip,username,passwd,cmd): 9 try: 10 11 ssh = paramiko.SSHClient() 12 print(‘正在登陆各台服务器‘) 13 print (‘%s\tOK\n‘%(ip)) 14 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 15 ssh.connect(ip,22,username,passwd,timeout=5) 16 for m in cmd: 17 stdin, stdout, stderr = ssh.exec_command(m) 18 # stdin.write("Y") #简单交互,输入 ‘Y’ 19 out = stdout.readlines() 20 #print (stdout) 21 #屏幕输出 22 for o in out: 23 print (o), 24 #print (‘%s\tOK\n ‘%(ip)) 25 26 27 ssh.close() 28 except : 29 print (‘%s\tError 不能正常连接这台\n‘%(ip)) 30 31 if __name__==‘__main__‘: 32 cmd=[] 33 username = "root" 34 passwd = "zxsoft0#" 35 print ("测试环境的服务有......") 36 ip=[‘192.168.202.102‘,‘192.168.202.103‘,‘192.168.202.101‘,‘192.168.202.11‘,‘192.168.202.12‘,‘192.168.202.13‘] 37 for i in ip: 38 print (i) 39 40 while 1: 41 y=input(‘如果你想继续添加多条命令请输入yes,如果是其他则退去:‘) 42 if y==‘yes‘: 43 x=input(‘请输入你要批量执行的命令:‘) 44 cmd.append(x) 45 else: 46 break 47 #你要执行的命令列表 48 print (‘如果命令必须是手动结束,所以在执行脚本一段时间后,如果想停止攻击,重新执行脚本输入命令 killall +命令 ‘) 49 for i in ip: 50 51 52 a=threading.Thread(target=ssh2,args=(i,username,passwd,cmd)) 53 a.start() 54
脚本执行的结果
时间: 2024-11-05 14:50:13