SFTPClient类

发布时间:2026/7/22 9:48:33

SFTPClient类
SFTPClient类importparamikoaspk host10.1.8.128port22userrootpasswordroottry:#建立隧道tpk.Transport((host,port))#建立连接t.connect(usernameuser,passwordpassword)#客户端sftppk.SFTPClient.from_transport(t)#上传文件sftp.put(C:\\Users\\孟宇\\PyCharmMiscProject\\paramiko模块\\system.log,/root/system.log)print(成功)t.close()exceptExceptionase:print(e)成功sftp.get(/root/abc.txt,./abc.txt)print(成功)成功sftp.mkdir(/root/test)print(成功)成功sftp.rename(/root/test,/root/test_python)print(成功)成功#删除目录sftp.rmdir(/root/test_python)#删除文件sftp.remove(/root/abc.txt)print(成功)t.close()#查看文件状态print(sftp.stat(/root/system.log))#查看文件列表print(sftp.listdir(/root/))-rw-r--r--1003459720Jul09:26?[.bash_logout,.bash_profile,.bashrc,.cshrc,.tcshrc,anaconda-ks.cfg,.bash_history,.viminfo.tmp,Python-3.14.2.tgz,Python-3.14.2,.config,.cache,system.log,.viminfo]堡垒机模式下的远程命令执行importsysimportparamiko as pkimporttime# 配置信息 blhost10.1.8.128# 堡垒机 IPbluserrootblpwdroothost10.1.8.129# 业务机 IPuserrootpwdrootport22# 开始连接 pk.util.log_to_file(sshclient_system.log)sshclientpk.SSHClient()sshclient.set_missing_host_key_policy(pk.AutoAddPolicy())try: sshclient.connect(hostnameblhost,usernamebluser,passwordblpwd,timeout10)print([] 堡垒机连接成功)except Exception as e: print(f[-] 堡垒机连接失败: {e})sys.exit(1)# 创建交互式 shellchannelsshclient.invoke_shell()channel.settimeout(10)# 发送 ssh 登录业务机命令channel.send(fssh {user}{host}\n)buff# ----- 阶段1等待密码提示或 yes/no -----whileTrue: try: respchannel.recv(9999).decode(utf-8)ifnot resp:continuebuffresp print(f[DEBUG] 收到: {repr(resp)})except Exception as e: print(f[-] 接收超时/错误: {e})channel.close()sshclient.close()sys.exit(1)ifyes/noinbuff.lower(): channel.send(yes\n)buffcontinueifpassword:inbuff.lower(): print([] 检测到密码提示发送密码)break# ----- 阶段2发送密码 -----channel.send(pwd \n)buff# ----- 阶段3等待业务机 shell 提示符 -----whileTrue: try: respchannel.recv(9999).decode(utf-8)ifnot resp:continuebuffresp print(f[DEBUG] 收到: {repr(resp)})except Exception as e: print(f[-] 接收超时/错误: {e})channel.close()sshclient.close()sys.exit(1)ifpermission deniedinbuff.lower(): print([-] 业务机认证失败请检查密码)channel.close()sshclient.close()sys.exit(1)if#inbuff or$inbuff: print([] 业务机登录成功)break# ----- 阶段4执行 ifconfig 并读取输出 -----channel.send(ifconfig\n)bufftime.sleep(0.5)whileTrue: try: respchannel.recv(9999).decode(utf-8)ifnot resp:continuebuffrespif#inbuff or$inbuff:breakexcept Exception as e: print(f[-] 接收命令输出超时: {e})break# 打印输出去除最后一行提示符linesbuff.splitlines()iflines and(#inlines[-1]or$inlines[-1]): lines.pop()print(\n ifconfig 输出 \n)print(\n.join(lines))channel.close()sshclient.close()ifconfigens160:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1500inet10.1.8.129 netmask255.255.255.0 broadcast10.1.8.255 inet6 fe80::20c:29ff:feb5:6649 prefixlen64scopeid 0x20linkether 00:0c:29:b5:66:49 txqueuelen1000(Ethernet)RX packets350bytes164182(160.3KiB)RX errors0dropped0overruns0frame0TX packets372bytes40988(40.0KiB)TX errors0dropped0overruns0carrier0collisions0lo:flags73UP,LOOPBACK,RUNNINGmtu65536inet127.0.0.1 netmask255.0.0.0 inet6 ::1 prefixlen128scopeid 0x10hostloop txqueuelen1000(Local Loopback)RX packets0bytes0(0.0B)RX errors0dropped0overruns0frame0TX packets0bytes0(0.0B)TX errors0dropped0overruns0carrier0collisions0远程文件上传importparamikoimportsysimporttime# 堡垒机信息 blip10.1.8.128bluserrootblpwdroot# 业务服务器信息 hostname10.1.8.129usernamerootpasswordroot# 路径配置 tmpdir/tmpremotedir/datalocalpathC:\\Users\\孟宇\\Downloads\\Python-3.14.2.tgztmppathtmpdir/Python-3.14.2.tgzremotepathremotedir/Python-3.14.2.tgzport22PASS_PROMPTpassword:SHELL_PROMPT## 业务机提示符paramiko.util.log_to_file(syslogin.log)# ----- 阶段1上传文件到堡垒机 -----tparamiko.Transport((blip,port))t.connect(usernamebluser,passwordblpwd)sftpparamiko.SFTPClient.from_transport(t)print([] 上传本地文件到堡垒机...)sftp.put(localpath,tmppath)print([] 上传完成)sftp.close()t.close()# ----- 阶段2通过堡垒机执行 scp -----sshparamiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostnameblip,usernamebluser,passwordblpwd,timeout10)print([] 堡垒机 SSH 连接成功)channelssh.invoke_shell()channel.settimeout(10)time.sleep(0.5)# ---------- 2.1 先创建业务机上的目标目录 ----------mkdir_cmdfssh{username}{hostname}mkdir -p{remotedir}\nchannel.send(mkdir_cmd)print(f[] 发送创建目录命令:{mkdir_cmd.strip()})buffwhileTrue:try:respchannel.recv(9999).decode(utf-8)ifnotresp:continuebuffrespprint(f[DEBUG] mkdir 输出:{repr(resp)})exceptExceptionase:print(f[-] 接收超时:{e})channel.close()ssh.close()sys.exit(1)# 如果出现密码提示可能业务机要求密码处理ifPASS_PROMPTinbuff.lower():channel.send(password\n)buffcontinue# 如果出现提示符说明命令执行完成if#inbuffor$inbuff:print([] 目录创建完成或已存在)break# ---------- 2.2 发送 scp 命令 ----------scp_cmdfscp{tmppath}{username}{hostname}:{remotepath}\nchannel.send(scp_cmd)print(f[] 发送 scp 命令:{scp_cmd.strip()})buff# 等待密码提示如果是首次 scp 会询问whileTrue:try:respchannel.recv(9999).decode(utf-8)ifnotresp:continuebuffrespprint(f[DEBUG] scp 输出:{repr(resp)})exceptExceptionase:print(f[-] 接收超时:{e})channel.close()ssh.close()sys.exit(1)# 处理主机密钥确认ifyes/noinbuff.lower():channel.send(yes\n)buffcontinue# 检测密码提示ifPASS_PROMPTinbuff.lower():print([] 检测到密码提示发送业务机密码)channel.send(password\n)buffcontinue# 如果出现提示符传输完成if#inbuffor$inbuff:print([] scp 传输完成)break# 打印 scp 输出去除提示符行linesbuff.splitlines()iflinesand(#inlines[-1]or$inlines[-1]):lines.pop()print(\n scp 输出信息 \n)print(\n.join(lines))channel.close()ssh.close()print([] 任务完成)[]上传本地文件到堡垒机...[]上传完成[]堡垒机 SSH 连接成功[]发送创建目录命令:ssh root10.1.8.129mkdir -p /data[DEBUG]mkdir 输出:Last login: Mon Jul 20 14:05:12 2026 from 10.1.8.1\r\r\n[\x1b[91mroot\x1b[93m\x1b[92;1mxhde\x1b[0m \x1b[94m~\x1b[0m \x1b[35m14:06:02\x1b[0m]\x1b[93m#\x1b[0m []目录创建完成或已存在[]发送 scp 命令:scp/tmp/Python-3.14.2.tgz root10.1.8.129:/data/Python-3.14.2.tgz[DEBUG]scp 输出:ssh root10.1.8.129 mkdir -p /data\r\n[DEBUG]scp 输出:scp /tmp/Python-3.14.2.tgz root10.1.8.129:/data/Python-3.14.2.tgz\r\n[DEBUG]scp 输出:\rroot10.1.8.129s password: []检测到密码提示发送业务机密码[DEBUG]scp 输出:\r\n[DEBUG]scp 输出:[\x1b[91mroot\x1b[93m\x1b[92;1mxhde\x1b[0m \x1b[94m~\x1b[0m \x1b[35m14:06:03\x1b[0m]\x1b[93m#\x1b[0m []scp 传输完成scp 输出信息[]任务完成输出: ‘scp /tmp/Python-3.14.2.tgz root10.1.8.129:/data/Python-3.14.2.tgz\r\n’[DEBUG] scp 输出: \rroot10.1.8.129’s password: [] 检测到密码提示发送业务机密码[DEBUG] scp 输出: ‘\r\n’[DEBUG] scp 输出: [\x1b[91mroot\x1b[93m\x1b[92;1mxhde\x1b[0m \x1b[94m~\x1b[0m \x1b[35m14:06:03\x1b[0m]\x1b[93m#\x1b[0m ’[] scp 传输完成 scp 输出信息 [] 任务完成

相关新闻

XMind MCP协议详解与集成开发指南

XMind MCP协议详解与集成开发指南

2026/7/22 9:48:33

1. MCP协议基础解析XMind MCP(Model Context Protocol)是基于JSON-RPC 2.0规范的通信协议,专为思维导图软件与外部系统的深度集成设计。这个协议本质上建立了一套标准化的对话机制,让XMind可以像人类对话一样与其他应用程序交换数…

信创环境下内网考试系统部署与安全实践

信创环境下内网考试系统部署与安全实践

2026/7/22 9:38:33

1. 信创背景下的内网考试系统需求分析在数字化转型和国产化替代的大背景下,部队及涉密单位对内部考试培训系统的需求呈现出明显的特殊性。传统基于互联网的SaaS考试平台已无法满足这类单位对数据安全、系统可控性和国产化适配的严格要求。核心需求痛点主要体现在三个…

Seedance3.0本地部署实战:免费AI视频生成与绘画完整指南

Seedance3.0本地部署实战:免费AI视频生成与绘画完整指南

2026/7/22 9:38:33

Seedance3.0本地部署实战:无需魔法免费生成AI视频与绘画 最近在探索AI视频生成工具时,发现很多在线服务要么收费昂贵,要么需要特殊网络环境。经过多方测试,终于找到了一套完整的本地部署方案,能够免费生成高质量的AI视…

TTO替换为紫外激光时,为什么不能只看打样效果?

TTO替换为紫外激光时,为什么不能只看打样效果?

2026/7/22 10:48:53

在软包装卷膜产线上,TTO热转印常用于生产日期、批次号、二维码和其他可变信息。当色带消耗、换带频率和维护停机逐渐增加时,一些生产现场会开始评估紫外激光标识。但从工程实施角度看,这并不是简单地拆下一台TTO,再安装一台激光设…

嵌入式USB批量传输与DMA配置实战:TI CPPI架构深度解析

嵌入式USB批量传输与DMA配置实战:TI CPPI架构深度解析

2026/7/22 10:48:53

1. USB批量传输与DMA:嵌入式系统数据搬运的基石 在嵌入式系统开发中,尤其是涉及高速数据采集、大容量存储或实时音视频处理的项目里,USB接口的性能往往是整个系统的瓶颈。我们经常遇到这样的场景:一个基于ARM Cortex-A系列处理器的…

PLC编程进阶:PID控制的实际应用案例

PLC编程进阶:PID控制的实际应用案例

2026/7/22 10:48:53

PID(比例-积分-微分)是工业自动化中使用最广泛的闭环控制算法。本文以西门子S7-1200为例,通过两个完整案例讲解PID的组态、参数整定和常见故障处理。一、PID基础知识速览PID控制器通过比较设定值(SP)和过程值&#xff…

知网AIGC检测3.0算法解析与降AI率实战方案

知网AIGC检测3.0算法解析与降AI率实战方案

2026/7/22 10:48:53

1. 知网AIGC检测3.0算法升级背景解析 2023年底知网推出的AIGC检测3.0算法,被学术圈称为"史上最严AI内容识别系统"。根据实际测试数据,新算法对AI生成内容的识别准确率提升了约40%,误判率却控制在5%以内。这个系统主要依赖三个核心检…

劳务管理不止实名登记:益企工程云如何打通成本、合同与安全,实现用工风险闭环?

劳务管理不止实名登记:益企工程云如何打通成本、合同与安全,实现用工风险闭环?

2026/7/22 10:48:53

在工程项目管理中,劳务管理常被简化为“实名制登记”和“记工考勤”。但稍有现场经验的人都知道,劳务用工的风险远不止这些:入场人员身份不清引发用工纠纷、考勤数据失真导致工资多发少发、人工成本超支却无法预警、现场不安全行为连带事故责…

PRU-ICSS中断控制器:工业实时系统的硬件优先级仲裁与配置实战

PRU-ICSS中断控制器:工业实时系统的硬件优先级仲裁与配置实战

2026/7/22 10:38:53

1. PRU-ICSS中断控制器:实时系统的“交通指挥中心” 在嵌入式实时系统,尤其是工业通信和控制领域,我们常常需要处理来自四面八方、不同优先级的异步事件。比如,一个电机驱动器需要同时响应编码器的位置信号、处理来自上位机的通信…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/21 5:45:57

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/21 9:56:14

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/21 3:09:32

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

设计EDA 首席专家 12 维度 JD(HR 仅高管 / HRD 使用)

设计EDA 首席专家 12 维度 JD(HR 仅高管 / HRD 使用)

2026/7/22 0:08:09

定位:公司 EDA 技术最高负责人、技术天花板、战略级专家、流片总兜底人 属于P9/Fellow/ 首席科学家级,不做日常执行,管方向、管架构、管风险、管突破。1. 对标层级内部职级:P9 / 首席专家 / Fellow 外部对标:华为 20–…

费用率无法实时监控怎么办?费用率联动预算管理怎么实现?

费用率无法实时监控怎么办?费用率联动预算管理怎么实现?

2026/7/22 0:08:09

很多企业费用管控存在严重滞后性:日常差旅、招待、营销、人力费用持续发生,但费用率只能等到月末结账、营收数据出来后才能计算核对,月度中途费用超标、营收不达标导致的费用率失衡完全无法感知。等到月末发现整体费用率远超预算目标时&#…

设计EDA 研发总监 12 维度 JD(HR 内部仅高管层使用)

设计EDA 研发总监 12 维度 JD(HR 内部仅高管层使用)

2026/7/22 0:08:09

定位:公司 EDA / 设计平台最高管理岗,技术 管理 经营三重决策,对整体流片、效率、质量、成本、团队负最终责任1. 对标层级内部职级:M3 / P8 / 总监级 外部对标:华为 20 级、互联网 M2 / 总监、头部芯片 / EDA 公司研…