Python_paramiko_与linux交互

一、基础功能介绍 

# coding=utf-8
import paramiko
from time import sleep# 建立通信
transport = paramiko.Transport(('192.168.0.7', 22))
print(transport)  # <paramiko.Transport at 0x5745ed0 (unconnected)># 建立连接
transport.connect(username='root', password='123456')
print(transport)  # <paramiko.Transport at 0x5745ed0 (cipher aes128-ctr, 128 bits) (active; 0 open channel(s))>
# 注意 active 此时为0# 开启一个信道
channel = transport.open_session()
print(channel)  # <paramiko.Channel 0 (open) window=0 -> <paramiko.Transport at 0x5745ed0 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>
# 调用open_session后,active为1,表示已打开channel。此时只能下发命令,收不到回显# 设置信道获取信息的超时时间。因为在调用 channel.recv(65535) 方法时 会阻塞执行,不设置就会卡死。
channel.timeout = 10# 开启终端,进入交互模式
channel.get_pty()
channel.invoke_shell()sleep(2)  # 是为了一次能显示完所有回显,如果不等待2秒,获取的回显可能不完整。# 检查通道是否有数据。若没有,则返回False,注意:不能用来判断已回显完。当下发命令后,执行出现卡顿,在卡顿期间信道是没有数据的。
channelStatus = channel.recv_ready()
print(channelStatus)  # 此时返回True# 获取返回的数据。此时返回的是登陆信息。注意:当信道没有数据是,若直接获取,则会处于阻塞状态
backMsg = channel.recv(65535).decode('utf-8')  # 使用recv读取in-buffer内容,65535表示预读取内容大小,若该值小于in-buffer值,则会读取不完全
print(backMsg)# 下发命令,命令后需追加\n表示发送命令
channel.send("10.27.0.7 \r")
sleep(2)
backMsg = channel.recv(65535).decode('utf-8')
print(backMsg)channel.send("mysql22001  \r")
sleep(2)
backMsg = channel.recv(65535).decode('utf-8')
print(backMsg)channel.send("quit;  \r")
sleep(2)
backMsg = channel.recv(65535).decode('utf-8')
print(backMsg)# 关闭信道
channel.close()# 关闭连接
transport.close()

二、简单封装

import paramiko
import timeclass SSH(object):def __init__(self):self.__transport = Noneself.__channel = Noneself.__default_end_check_infos = ["[root@"]def connect(self, host, port, username, password, **kwargs):# 建立通信self.__transport = paramiko.Transport((host, port))# 建立连接self.__transport.connect(username=username, password=password)# 开启一个信道self.__channel = self.__transport.open_session()self.__channel.timeout = 10# 开启终端,进入交互模式self.__channel.get_pty()self.__channel.invoke_shell()return self.__echo(**kwargs)def disconnect(self):self.__channel.close()self.__transport.close()def exec_cmd(self, cmd, **kwargs):self.__channel.send("%s \r" % cmd)return self.__echo(**kwargs)def set_echo_end_check_info(self, end_check_info=None):""" 设置回显校验信息 """if end_check_info is not None:if isinstance(end_check_info, str):self.__default_end_check_infos.append(end_check_info)if isinstance(end_check_info, list):self.__default_end_check_infos = self.__default_end_check_infos + end_check_inforeturn self.__default_end_check_infosdef __echo(self, timeout=10, interval=0.5):""" 获取回显 """t0 = time.time()echo = ""while time.time()-t0 < timeout:if self.__channel.recv_ready() is True:_echo = self.__channel.recv(65535).decode('utf-8')echo += _echofor end_check_info in self.__default_end_check_infos:if end_check_info in echo:print(echo)time.sleep(0.5)return echotime.sleep(interval)self.disconnect()raise RuntimeError("获取预期回显超时!")if __name__ == '__main__':ssh_session = SSH()ssh_session.set_echo_end_check_info(["Opt>"])ssh_session.set_echo_end_check_info("MySQL")ssh_session.connect('192.168.0.7', 22, 'root', '123456')ssh_session.exec_cmd("10.27.0.7")ssh_session.exec_cmd("mysql22001")ssh_session.exec_cmd("quit;")ssh_session.disconnect()

执行结果:


源码等资料获取方法

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/23330.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3+ts;枚举(enum);Partial全部可选/Pick选一部分/配置 svg 图标/unplugin-vue-components组件自动按需加载

项目的创建 使用 create-vue 脚手架创建项目。 1.执行创建命令 pnpm create vue # or npm init vuelatest # or yarn create vue2.选择项目依赖内容。 ✔ Project name: … //项目名 ✔ Add TypeScript? … No / Yes ✔ Add JSX Support? … No / Yes ✔ Add Vue Router …

ChatGPT:利用人工智能助推教育创新

当前&#xff0c;世界正需要一个更加开放的、更加个性化的学习空间&#xff0c;学生的个性发展和生存发展应该被关注和尊重&#xff0c;课程应该引导学生掌握有用的东西&#xff0c;学生之间的差距应该被正视&#xff0c;教育成功的标准也要被重新定义。过去&#xff0c;我们总…

全网最完整,接口测试总结彻底打通接口自动化大门,看这篇就够了......

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试 前言 所谓接口&#xff0c;是指同一个系统中模块与模块间的数据传递…

【Spring Cloud系列】Hystrix应用详解

【Spring Cloud系列】Hystrix应用详解 文章目录 【Spring Cloud系列】Hystrix应用详解一、概述二、什么是Hystix三、Hystrix作用四、Hystrix设计原则五、Hystrix实现原理5.1 隔离5.2 熔断5.3 降级服务降级主要用于什么场景呢实现服务降级需要考虑几个问题降级分类 5.4 缓存请求…

呼吸灯——FPGA

文章目录 前言一、呼吸灯是什么&#xff1f;1、介绍2、占空比调节示意图 二、系统设计1、系统框图2、RTL视图 三、源码四、效果五、总结六、参考资料 前言 环境&#xff1a; 1、Quartus18.0 2、vscode 3、板子型号&#xff1a;EP4CE6F17C8 要求&#xff1a; 将四个LED灯实现循环…

RPC和HTTP区别是什么?

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;RPC和HTTP区别是什么&#xff1f; ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的…

latex3【排版】

多行公式排版&#xff1a;&#xff08;gather、align、split、cases&#xff09; \section{多行公式}%gather环境\begin{gather} abba \\ abcbaccbacab\end{gather}\begin{gather*} abba \\ abcbaccbacab\end{gather*}​\begin{gather} abba \\ 123 \notag …

第十五章——友元、异常

友元 类并非只能拥有友元函数&#xff0c;也可以将类作为友元。在这种情况下&#xff0c;友元类的所有方法都可以访问原始类的私有成员和保护成员。因此尽管友元被授予从外部访问类的私有部分的权限&#xff0c;但它们并不与面向对象的编程思想相悖&#xff0c;相反提高了共有…

【高效】极致简化vuex.js(仅需6行代码),让快速敏捷开发不是梦!

vuex.js import Vue from vue; import Vuex from vuex; Vue.use(Vuex); // 设置vuex所有变量 let state {_qiangGe: false,//需要添加全局变量就在此处回车添加一个即可&#xff0c;非常方便&#xff01;&#xff01;&#xff01; }, getters {}, mutations {}, actions …

重塑未来的1课:组装式交付新引擎——华为云智能化低代码平台

HDC期间可参与Astro注册抽奖&#xff0c;活动详情见文末&#xff01; 紧跟低代码技术飞速发展——华为云Astro智能工作流惊艳HDC.Cloud 2023&#xff01; 企业对未来智能化组装式交付的期待已不是空想。智能化低代码即将重新定义传统交付模式&#xff0c;密切连接AI科技与创造…

万字解读 | 数据可视化平台--FineBI

什么是BI 学习目标 知道什么是BI 知道FineBI的优势 1. 商业智能: BI&#xff08;Business Intelligence&#xff09;是指通过收集、分析和解释企业内外部数据&#xff0c;为企业决策提供支持和指导的一种技术和工具。商业智能的目标是帮助企业管理者和决策者更好地理解企业…

4. Shuffle 5. 内存的管理

4. Shuffle (1) Shuffle 的原理和执行过程 在Scala中&#xff0c;Shuffle是指对集合或序列进行随机打乱或重新排列的操作。它可以用于打乱集合中元素的顺序&#xff0c;以便在后续的操作中获得更好的随机性或均匀性。 在Scala中&#xff0c;可以使用scala.util.Random类的shu…