批量远程执行linux服务器程序--基于paramiko(多线程版)

批量远程执行linux服务器程序--基于paramiko

paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接

具体安装方法这里不写,网上一大把

#!/usr/bin/python
#coding:utf-8
import paramiko
import threading
import os,sys,time
import subprocess
from optparse import OptionParser
import logging

usage='%prog [-h][-f file][-c CMDS][--version]'

parser=OptionParser(usage=usage,version='HuZhiQiang 2.0_20150618')
parser.add_option('-f','--File',dest='server',default='ip.txt',help='The Server Info')
parser.add_option('-c','--CMDS',dest='cmd',default="uptime,top -n 1,df -Ph |awk 'NR == 1 || NR == 6{print $0}',ifconfig |awk 'NR==8'|sed 's/^\s*//g'",help='You wann to execute commands')
(options,args)=parser.parse_args()

#日志记录这里注释了,有需要的可以打开
''' logging.basicConfig(Level=logging.INFO) logger=logging.getLogger(__name__) handler=logging.FileHandler('rem.log') handler.setLevel(logging.INFO) formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) ''' #print options.server,options.cmd def ssh2(ip,pt,pw,us,comm): try: ssh = paramiko.SSHClient() ssh.load_system_host_keys() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #logging.INFO( "%s %s %s" % ('*'*50,ip,'*'*50) ) ssh.connect(ip,port=pt,username=us,password=pw) f.write(('='*20 +'%s status' +'='*20 + '\n')% ip) for COMM in comm: #print COMM stdin,stdout,stderr = ssh.exec_command(COMM) print "%s The command %s result is:\n" % (time.strftime("%Y%m%d %H:%M:%S"),COMM) read = stdout.read() print read print '-'*60 f.write(read) ssh.close() # except SyntaxError: # print "please checking" # sys.exit() except: print "SSH Connection refused"
print "-" *60
sys.exit() if __name__ == '__main__': if os.path.exists(options.server): filename=options.server pass else: print 'Please check %s and ip.txt is exits' % options.server exit(-1) print "\033[1;31m ...... 请等待......\033[0m" open_ip = open(options.server) f = open('Allsystem.log','a') paramiko.util.log_to_file('paramiko.log') up='uptime' df = "df -Ph |awk 'NR == 1 || NR == 6{print $0}'" net="ifconfig |awk 'NR==8'|sed 's/^\s*//g'" command = [] command=options.cmd.split(',') print command #command.append(options.cmd) for line in open_ip.readlines(): #for line in subprocess.Popen('cat ip.txt',shell=True).communicate()[0]: ip,user,passwd,port=line.strip().split() cmm=['ping','-c','1','-w','1'] cmm.extend(ip.split()) #print cmm a=subprocess.Popen(cmm,stdout=subprocess.PIPE) a.wait() b=a.returncode if b==0: print "%s is up" % ip port=int(port) aa = threading.Thread(target=ssh2,args=(ip,port,passwd,user,command)) aa.start() aa.join() else:print "%s id down" % ip open_ip.close() f.write('='*20 +'All done' +'='*20 + '\n') f.flush() f.close()

 运行结果如下:

转载于:https://www.cnblogs.com/landhu/p/4961539.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想要实现基于面向对象思想和paramiko远程登录服务器,并使用多线程进行ping操作,并在出现故障时声音报警。这是一项比较复杂的任务,需要一定的编程经验和网络知识。以下是一般思路: 1. 导入paramiko包并使用其进行远程登录。 2. 设计一个Ping类实现ping操作,并嵌入多线程实现批量ping。 3. 在Ping类中设置声音报警,并在ping操作出现故障时进行报警。 4. 在主函数中调用Ping类实现批量ping操作并进行报警。 需要注意的是,由于您是在服务器上进行ping操作,所以需要确保服务器开启了ping功能。 若要开启,请使用以下命令: Linux系统:sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0 Windows系统:在cmd窗口中输入netsh firewall set icmpsetting 8,允许ping请求。 此外,在声音报警方面,您可以使用Python的winsound库进行实现。以下是具体的代码实现: ``` import paramiko import threading import os import time import winsound class Ping(threading.Thread): def __init__(self, ip): threading.Thread.__init__(self) self.ip = ip def run(self): response = os.system("ping -n 1 " + self.ip) if response == 0: print(self.ip, 'is up!') else: winsound.Beep(500,2000) print(self.ip, 'is down!') def ssh_connect(ip, username, password): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip, port=22, username=username, password=password) return ssh if __name__ == '__main__': ips = ['192.168.0.1', '192.168.0.2', '192.168.0.3'] username = 'your_username' password = 'your_password' ssh = ssh_connect('192.168.0.1', username, password) for ip in ips: t = Ping(ip) t.start() time.sleep(30) ssh.close() ``` 在此代码中,我们使用Paramiko实现了远程登录,使用一个名为“Ping”的类实现了ping操作,并在出现故障时实现了声音报警。在主函数中,我们调用了Ping类实现了批量ping,并调用了系统的sleep函数来防止程序提前退出。同时,我们也确保了正确的关闭了SSH连接,以免造成资源的浪费。 希望这个回答能够帮助您。如果您有任何疑问,请随时提出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值