它是SSHv2协议的实现, 提供客户端和服务器功能。它本身是一个纯粹的接口, 这个接口紧密围绕着SSH网络的概念来构建。我们可以使用它, 通过这样的方式来进行ssh操作, 而且这个过程会变得相当的方便。该方案由两个核心组件构成, 具体表现为: 和。它的作用, 实际上就跟咱们平时用的Linux里面的ssh命令差不多, 基本上是一样的意思。你可以把它理解为一种技术上的操作手段, 专门用来对SSH会话进行封装和处理的。该类进行了封装, 封装的内容包含了传输方面的事项、通道方面的事项以及建立方面的事项, 通常情况下, 它被用于执行远程命令。API我们来创建实例, 让那个SSH客户端出现。# 参数解释- hostname连接的目标主机- portSSH_PORT指定端口- usernameNone验证的用户名- passwordNone验证的用户密码- pkeyNone私钥方式用于身份验证- key_filenameNone一个文件名或文件列表指定私钥文件- timeoutNone可选的tcp连接超时时间- allow_agentTrue是否允许连接到ssh代理默认为True 允许- look_for_keysTrue是否在~/.ssh中搜索私钥文件默认为True 允许- compressFalse是否打开压缩可以通过验证方法去连接那个处于远程位置的服务器端来进行操作。# 参数解释- command要执行的命令- bufsize与Python中文件对象的同名函数解释相同缓冲区大小- timeout设置命令的超时相应事件- get_pty从服务器请求一个伪终端默认为假- environment一个当前shell环境的字典远程命令的默认执行环境参数指的是那些需要被执行的那些shell命令, 其操作会去打开一个全新的通道, 并且会在这新开的通道里执行你所请求的那个具体的命令。这个函数最后给出来的那个玩意儿是元组, 它里面有这些东西: 一个是标准输入也就是stdin, 还有标准输出以及出错。一般来说, 对于命令的执行结果, 我们通常是通过执行相关操作来进行获取的。把那个SSH的连接给关了。# 参数解释- term模拟终端类型- width终端长度- height终端宽度- width_pixels终端的像素宽度- height_pixels终端的像素高度- environment命令的shell环境就是在ssh服务器上面把交互式的shell会话给开启。一个全新的通信通道被顺利开辟, 它接着便通过调用相应的接口, 成功与指定的伪终端进行了对接连接。在这个过程中, 系统使用了请求所指定的那个终端类型, 以及对应的大小的参数配置, 最终将此作为返回的价值予以反馈。从一种通俗的角度来进行理解, 其核心含义就是去建立了一个真正存在的 shell 窗口空间, 以此来执行命令方面的交互操作。当需要连接到那些服务器端并不存在已知主机密钥的情况时, 应该去设置用来决定如何进行处理的策略选项内容。常见的使用策略是, 其作用是自动把主机名和新主机密钥加到本地主机密钥对象里面去, 然后进行保存。实例代码这是一个简单的代码,它是通过建立的通道进行命令的传输与返回结果的获取的代码import paramikodef connect(hostname,username,password):client paramiko.SSHClient()# 初始化client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 设置密钥策略client.connect(hostname,usernameusername,passwordpassword)# 连接主机return clientdef exec_cmd(client,cmd):stdin,stdout,stderr client.exec_command(cmd)return stdout.read().decode(),stderr.read().decode()def main():hostname 192.168.0.104username pipassword 123456cmd ps -auxclient connect(hostname,username,password)res exec_cmd(client, cmd)if res[0]:print(res[0])if res[1]:print([E]:\n,res[1])client.close()if __name__ __main__:main()上面的代码是使用了默认建立好的那个连接对象, 来进行命令的传输工作, 同时也完成了返回结果的获取动作。class SSHChannle:def __init__(self, host, username, password, port22):初始化SSH通道self.sh paramiko.SSHClient()self.sh.set_missing_host_key_policy(paramiko.AutoAddPolicy())self.sh.connect(host, usernameusername, passwordpassword)self.channle self.sh.invoke_shell()def get_ssh_recv(self):接收SSH通道中发来的消息while not self.channle.exit_status_ready():# 如果远程进程已退出并返回退出状态则返回truetime.sleep(0.1)try:buf self.channle.recv(1024).decode(utf-8)print(buf,end)sys.stdout.flush()except Exception as ex:print(ex)def send_ssh_cmd(self):发送命令给SSH通道while not self.channle.exit_status_ready():cmd input()try:self.channle.send(cmd \r)except Exception as ex:print(ex)sys.stdin.flush()def run(self):ssh_recv_thread threading.Thread(targetself.get_ssh_recv)ssh_send_thread threading.Thread(targetself.send_ssh_cmd)ssh_recv_thread.start()ssh_send_thread.start()ssh_recv_thread.join()ssh_send_thread.join()self.sh.close() # 关闭通道其作用类似于Linux系统中的sftp命令, 该工具是对SFTP客户端进行的封装。用来实现远程文件的各项操作, 比如说, 把文件弄上去, 或者是把文件拿下来, 又或者是去改一改这个文件应该有什么样的权限这些事儿。API# 参数解释- t该参数可以通过paramiko.Transport( (ip,port ))创建一个已通过验证的传输通道参数为IP和端口的二元组SFTP客户端的创建, 是根据参数t所指定的已经通过验证的传输通道来实现的。把那个本地的路径所指的文件, 给传到目标主机那儿去。将路径这个远程路径里面的那个文件, 给下载下来放到本地主机那里去。把那个位于远程主机上面的文件给打开, 这一点是和open这个函数非常类似的, 最后会返回一个文件对象。返回给定路径下的文件列表以及目录列表, 如果未提供指定路径的话, 那么默认使用当前工作目录作为路径。修改当前正在使用的SFTP连接会话里面的工作目录。检索当前path所指向的文件信息根据路径, 在目标主机上创建目录, 并且设置的默认权限是511。我们要把给定了路径的这个目录删除掉。删除给定path所指向的文件实例代码以下是一段关于的测试代码, 虽然它相对而言比较简陋。import paramikodef connecnt(hostname,username,password): #创建连接对象client paramiko.Transport( (hostname,22))try:client.connect(usernameusername,passwordpassword)except paramiko.SSHException:return Nonesftp_client paramiko.SFTPClient.from_transport(client)return sftp_clientdef main():hostname 192.168.0.104username pipassword 123456sftp_client connecnt(hostname,username,password)remotefile_path /home/pi/test # 目标主机文件路径localfile_path /home/test # 本地主机文件路径sftp_client.put(localfile_path, remotefile_path) #上传本地test文件到远程sftp_client.get(remotefile_path, localfile_path) #下载远程test文件到本地print(sftp_client.listdir())print(sftp_client.lstat(remotefile_path))with sftp_client.open(remotefile_path) as fp:print(fp.read().decode())#print(sftp_client.remove(remotefile_path))if __name__ __main__:main()
企业数字化 ERP 产品动态
相关推荐
Python数据处理教程:多表格文件单元格数据平均值计算 我们来详细讲解一下, 如何针对那一些存放在多个表格文档里面的单元格数据, 进行平均数值的计算操作。我们在日常的这种数据处理的实际工作过程里面, 总是会经常去面对一些比较具体的情况, 就是我们需要从一个或者多个包含表格格式的文件里面把相关的数据信息给提取出来。在提取… · 2026/9/24 17:44:33
『无为则无心』Python函数 — 30、Python变量的作用域 1、作用于的概念变量作用域指的是变量生效的范围, 在中一共有两种作用域。函数作用域的第二部分我们来讨论一下局部变量。所谓局部变量呢, 它就是被定义在函数体内部的那些变量, 也就是只在函数体内部有效。def testA():# 局部变量a# 在函数中为变量赋值时,默认都是… · 2026/9/24 17:44:21
没错,最强的Python编辑器还是它 为什么说才是搞的真爱,没用过的人可能体会不到所有人都在讨论, 哪一个写代码时最好用? 大家争论得非常激烈。许多人认为它是最厉害的工具。事实果真如此吗? 有人站出来说, 那个更轻巧灵活, 而且插件很多。这种说法听起来确实有道理。但是它的特点依然很突出, 它是… · 2026/9/24 17:44:21
OPNET OSPF动态路由实验配置验证与排错指南 简介:OSPF 是内部网关协议中广泛应用的链路状态路由协议,而 Riverbed OpNet 是业界常用的网络仿真与性能分析平台。该资源是一份面向网络工程师、运维人员及高校学生的 OSPF 仿真项目包,基于 OpNet 环境搭建了完整的 OSPF 网络模型࿰… · 2026/9/24 18:13:14
递增的三元子序列 题目描述
给你一个整数数组 numsnumsnums,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i,j,k)(i, j, k)(i,j,k) 且满足 i<j<ki < j < ki<j<k ,使得 nums[i]<nums[j]<nums[k]nums[i] < nums[… · 2026/9/24 18:13:14
JSP财务管理系统实战全指南:从源码解析到毕业设计避坑 简介:这套基于Jsp的财务管理系统设计与实现交付包,面向计算机相关专业学生及Java Web初学者,适用于课程设计、毕业设计或项目实训等场景,重点是解决财务模块从需求分析到实现交付的完整链路问题。压缩包内包含项目报告、中期报告、… · 2026/9/24 18:13:08
Jsp财务管理系统全解析:从架构设计到部署避坑指南 简介:基于JSP的财务管理系统全套项目资料,面向高校软件技术、财务信息化、管理信息系统等方向的课程设计或毕业设计人群。压缩包采用zip格式,大小约117.43MB,内容覆盖项目报告、中期报告、答辩PPT、完整源代码与数据库文件&#x… · 2026/9/24 18:13:08
C#在线二手交易平台开发详解:从架构设计到避坑指南 简介:基于C#语言开发的在线二手商品交易平台,面向毕业设计、课程设计场景,适合需要完成完整Web项目实践的学生与开发者。项目覆盖软件工程需求分析、系统设计、编码实现、数据库管理及测试部署等关键环节,能够帮助读者将理论知识转… · 2026/9/24 18:13:08
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44