python中Paramiko的SSH怎么用
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章将为大家详细讲解有关python中Paramiko的SSH怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。说明1、将所有设备信息写入文本文档。简单地使用
千家信息网最后更新 2025年01月22日python中Paramiko的SSH怎么用
这篇文章将为大家详细讲解有关python中Paramiko的SSH怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
说明
1、将所有设备信息写入文本文档。
简单地使用txt,将登录信息构建成字典。
2、初始化SSH连接和执行命令。
3、分析此需求指定的命令和输出结果。
将结果存储在文件中。
4、增加多线程执行。
提高效率。
5、添加Linux的crontab。
每小时收集一次信息(服务器配置)
实例
#!/usr/bin/env python# -*- coding:utf-8 -*-import reimport timefrom concurrent.futures import ThreadPoolExecutorimport paramiko def get_device_list(filename): """从文本文件读取设备列表,返回由字典组成的列表。 文本内容格式为:ip,用户名,密码,别名,例如: 1.1.1.1 admin admin sw1 1.1.1.2 admin admin sw2 ...... Args: filename ([str]): 文件名称 """ with open(filename, 'r') as f: device_list = [] for line in f.readlines(): ip, username, password, name = line.strip().split() device_list.append( { "ip": ip, "username": username, "password": password, "name": name, } ) return device_list class NetworkDevice(object): def __init__(self, ip="", username="", password="'", name="", port=22,): self.conn = None if ip: self.ip = ip.strip() elif name: self.name = name.strip() else: raise ValueError("需要设备连接地址(ip 或 别名)") self.port = int(port) self.username = username self.password = password self._open_ssh() def _open_ssh(self): """初始化 SSH 连接,调起一个模拟终端,会话结束前可以一直执行命令。 Raises: e: 抛出 paramiko 连接失败的任何异常 """ ssh_connect_params = { "hostname": self.ip, "port": self.port, "username": self.username, "password": self.password, "look_for_keys": False, "allow_agent": False, "timeout": 5, # TCP 连接超时时间 } conn = paramiko.SSHClient() conn.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: conn.connect(**ssh_connect_params) except Exception as e: raise e self.conn = conn.invoke_shell(term="vt100", width=500, height=1000) return "" def exec_cmd(self, cmd, recv_time=3): """登录设备,执行命令 Args: cmd ([type]): 命令字符串 recv_time (int, optional): 读取回显信息的超时时间. Defaults to 3. Raises: EOFError: 没有任何信息输出,说明连接失败。 Returns: output: """ cmd = cmd.strip() + "\n" self.conn.sendall("screen disable\n") self.conn.sendall(cmd) time.sleep(int(recv_time)) output = self.conn.recv(1024*1024) if len(output) == 0: raise EOFError("连接可能被关闭,没有任何信息输出") return output.decode('utf-8', 'ignore') dev = { "ip":"192.168.56.21", "username":"netdevops", "password":"Admin@h4c.com", "name": "sw1"}# sw1 = NetworkDevice(**dev)# ret = sw1.exec_cmd("dis version")# print(ret) def parse_interface_drop(output): """把设备的输出队列丢包信息解析成累加值 命令及输出示例如下: # [H3C]dis qos queue-statistics interface outbound | in "^ Drop" # Dropped: 0 packets, 0 bytes """ ptn = re.compile(r"\s(\S+):\s+(\d+)\s+(\S+),\s+(\d+)\s+(\S+)") count = 0 for i in ptn.findall(output): count += int(i[1]) return count def run(cmd, **conn_parms): """登录单台设备,执行指定命令,解析丢包统计 """ sw = NetworkDevice(**conn_parms) output = sw.exec_cmd(cmd) drop_count = parse_interface_drop(output) return "%s %s %s"%( conn_parms.get("name"), conn_parms.get("ip"), drop_count) # cmd = r'dis qos queue-statistics interface outbound | in "^ Drop"'# ret = run(cmd,**dev)# print(ret) if __name__== "__main__": """获取设备列表,使用多线程登录设备获取信息并返回 """ with ThreadPoolExecutor(10) as pool: futures = [] cmd = r'dis qos queue-statistics interface outbound | in "^ Drop"' dev_info = get_device_list("./iplist.txt") for d in dev_info: future = pool.submit(run, cmd, **d) futures.append(future) # for f in futures: # print(f.result()) # 根据执行时间把结果写入文件,精确到小时 with open("./drops/%s.log"%time.strftime("%Y%m%d_%H"),'w') as f: for line in futures: f.write(line.result() + "\n")
关于"python中Paramiko的SSH怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
信息
设备
命令
输出
文件
登录
时间
篇文章
结果
内容
别名
字典
小时
文本
更多
线程
不错
实用
精确
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
重庆酉阳生鲜类的软件开发
小度服务器武打片
服务器 为什么贵
软件开发工作需要汇报工作吗
数据库划分的类型
互创互联网网络科技有限公司
网关服务器什么样子
漯河市网络安全工作室
文胜互联网科技公司
java里面创建数据库表
上海汇诚网络技术有限公司
关于网络安全的视频演讲
星际蜗牛c款服务器
苹果电脑检查代理服务器地址
成都项目软件开发定做
河北机架式服务器机箱价格
公安网络安全警示
设计工作者租用服务器
办公网络安全风险评估报告
网络安全治理简报
xbox全境封锁服务器
小白数据库手机续航排行
软件开发公司泰安招聘
服务器上绑定域名
软件开发是属于什么职门
通信软件开发工程师面经
cae搞软件开发
软件开发用服务器cpu
测试软件开发流程
网络安全保密认证