Python使用paramiko进行远程交互
来源:互联网 发布:mac qq 离线文件 编辑:程序博客网 时间:2024/05/08 01:46
import sys, getopt
import paramiko,socket
import Queue
import threading
import time
import operator
import re
from bcolors import bcolors
servers = open("").readlines()
servers = [s.strip() for s in servers]
validServerNum = len(servers)
sevnumLock = threading.Lock()
serverQueue = Queue.Queue()
serverLock = threading.Lock()
loadSum = {}
loadLock = threading.Lock()
optargs = sys.argv[1:]
paramiko.util.log_to_file('paramiko.log')
try:
opts, args = getopt.getopt(optargs, "s:n:", ["sample=", "number="])
except getopt.GetoptError as err:
sys.stderr.write("[ERROR] Invalid Syntax\n")
sys.exit(1)
for opt, arg in opts:
if opt in ("-s", "--sample="):
stimes = int(arg)
elif opt in ("-n", "--number="):
number = int(arg)
if not locals().has_key("stimes"):
stimes = 3
if not locals().has_key("number"):
number = len(servers)
class ThreadSniffer(threading.Thread):
def __init__(self, queue, threadID, stimes, loadsum):
threading.Thread.__init__(self)
self.queue = queue
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.id = threadID
self.stimes = stimes
self.loadsum = loadsum
def run(self):
global validServerNum
while not self.queue.empty():
serverLock.acquire()
server = self.queue.get()
serverLock.release()
print "#"+str(self.id)+" thread trys to connect to server "+server
try:
self.ssh.connect(server, username="hnie")
loadtime = [0, 0, 0]
loadbase = [0, 0, 0]
for stime in range(1, self.stimes+1):
sin, sout, serr = self.ssh.exec_command("uptime")
res = sout.readlines()[0].split()[-3:]
res = [float(r.rstrip(',')) for r in res]
for i in range(len(res)):
loadtime[i] += stime*res[i]
loadbase[i] += stime
time.sleep(1)
self.ssh.close()
for i in range(len(loadtime)):
loadtime[i] /= loadbase[i]
loadLock.acquire()
self.loadsum[server]=loadtime
loadLock.release()
except paramiko.AuthenticationException:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
except socket.gaierror:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.WARNING+"we do not have "+server+bcolors.ENDC
except paramiko.ssh_exception.NoValidConnectionsError:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.WARNING+"we cannot connect to "+server+bcolors.ENDC
except paramiko.ssh_exception.SSHException:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.WARNING+"Error reading SSH protocol banner for "+server+bcolors.ENDC
except socket.error, exc:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.FAIL+str(exc)+"!!!There may no longer exist "+server+bcolors.ENDC
self.queue.task_done()
for server in servers:
serverQueue.put(server)
numThread = max(len(servers)/4, 20)
for n in range(numThread):
threadS = ThreadSniffer(serverQueue, n, stimes, loadSum)
threadS.setDaemon(True)
threadS.start()
serverQueue.join()
loadSum = sorted(loadSum.items(), key=operator.itemgetter(1))
number = min(number, validServerNum)
for n in range(number):
print (loadSum[n][0]+"\t"+"\t".join(map(str, loadSum[n][1])))
import paramiko,socket
import Queue
import threading
import time
import operator
import re
from bcolors import bcolors
servers = open("").readlines()
servers = [s.strip() for s in servers]
validServerNum = len(servers)
sevnumLock = threading.Lock()
serverQueue = Queue.Queue()
serverLock = threading.Lock()
loadSum = {}
loadLock = threading.Lock()
optargs = sys.argv[1:]
paramiko.util.log_to_file('paramiko.log')
try:
opts, args = getopt.getopt(optargs, "s:n:", ["sample=", "number="])
except getopt.GetoptError as err:
sys.stderr.write("[ERROR] Invalid Syntax\n")
sys.exit(1)
for opt, arg in opts:
if opt in ("-s", "--sample="):
stimes = int(arg)
elif opt in ("-n", "--number="):
number = int(arg)
if not locals().has_key("stimes"):
stimes = 3
if not locals().has_key("number"):
number = len(servers)
class ThreadSniffer(threading.Thread):
def __init__(self, queue, threadID, stimes, loadsum):
threading.Thread.__init__(self)
self.queue = queue
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.id = threadID
self.stimes = stimes
self.loadsum = loadsum
def run(self):
global validServerNum
while not self.queue.empty():
serverLock.acquire()
server = self.queue.get()
serverLock.release()
print "#"+str(self.id)+" thread trys to connect to server "+server
try:
self.ssh.connect(server, username="hnie")
loadtime = [0, 0, 0]
loadbase = [0, 0, 0]
for stime in range(1, self.stimes+1):
sin, sout, serr = self.ssh.exec_command("uptime")
res = sout.readlines()[0].split()[-3:]
res = [float(r.rstrip(',')) for r in res]
for i in range(len(res)):
loadtime[i] += stime*res[i]
loadbase[i] += stime
time.sleep(1)
self.ssh.close()
for i in range(len(loadtime)):
loadtime[i] /= loadbase[i]
loadLock.acquire()
self.loadsum[server]=loadtime
loadLock.release()
except paramiko.AuthenticationException:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
except socket.gaierror:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.WARNING+"we do not have "+server+bcolors.ENDC
except paramiko.ssh_exception.NoValidConnectionsError:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.WARNING+"we cannot connect to "+server+bcolors.ENDC
except paramiko.ssh_exception.SSHException:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.WARNING+"Error reading SSH protocol banner for "+server+bcolors.ENDC
except socket.error, exc:
sevnumLock.acquire()
validServerNum -= 1
sevnumLock.release()
print bcolors.FAIL+str(exc)+"!!!There may no longer exist "+server+bcolors.ENDC
self.queue.task_done()
for server in servers:
serverQueue.put(server)
numThread = max(len(servers)/4, 20)
for n in range(numThread):
threadS = ThreadSniffer(serverQueue, n, stimes, loadSum)
threadS.setDaemon(True)
threadS.start()
serverQueue.join()
loadSum = sorted(loadSum.items(), key=operator.itemgetter(1))
number = min(number, validServerNum)
for n in range(number):
print (loadSum[n][0]+"\t"+"\t".join(map(str, loadSum[n][1])))
0 0
- Python使用paramiko进行远程交互
- python使用paramiko和SCPClient进行linux远程控制和上传和下载文件
- windows下python配置paramiko进行ssh远程连接
- Python使用Paramiko模块实现远程文件拷贝
- python paramiko ssh远程连接
- Python使用paramiko进行SSH和SFTP连接
- python paramiko使用
- python使用paramiko
- python使用paramiko
- python 安装使用paramiko
- Python 模块功能paramiko SSH 远程执行及远程下载(可以使用)
- python paramiko模块实现ssh远程控制
- 【python】通过paramiko远程拷贝文件
- Python模块paramiko:操作远程服务器
- python paramiko实现ssh远程登录
- python paramiko模块使用介绍
- Python Paramiko模块的使用
- Python 使用paramiko实现远程登录Linux主机并执行命令和操作
- Android代码混淆
- Syntax features 语法特性(二)
- reactjs,组件的生命周期
- 伊始
- adb shell 如何选择特定的设备?
- Python使用paramiko进行远程交互
- Docker 网络不通的解决方法
- html5学习路线规划------莫名觉得还挺有爱滴。。。。
- Android Studio安装apk应用手机桌面两个图标
- 禁用mac 内置键盘
- 算法面试题(二)-- 最长公共子序列(LCS)与苦恼的月下老人
- junit的test 方法执行两次
- ubuntu 中docker 安装
- Hibernate 的那些坑