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协议详解与集成开发指南

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

2026/7/23 11:56:03 阅读更多 →
TMS320F2837xS中断配置全解析:从PIE架构到实战避坑指南

TMS320F2837xS中断配置全解析:从PIE架构到实战避坑指南

1. 项目概述与中断系统核心价值 在嵌入式实时控制领域,尤其是电机驱动、数字电源、新能源并网这些对时序和响应速度要求严苛的场景里,中断机制是系统能够“一心多用”并保持确定性的基石。想象一下,你正在厨房同时处理几个锅,主菜…

2026/7/23 11:56:36 阅读更多 →
2026/7/21

2026/7/21

基础线学习Git的使用,配置环境,学习远程本地连接,Github和Gitee使用基础克隆,添加,提交,推送,拉取学习vscode协助keil开发环境及trae辅助使用keil assistant(已落后需更新&#xff0…

2026/7/23 11:35:29 阅读更多 →

最新新闻

AI论文写作工具对比:千笔AI与学术猹的技术解析与应用

AI论文写作工具对比:千笔AI与学术猹的技术解析与应用

1. 项目概述:AI论文写作工具的行业价值 去年帮导师审稿时,我连续遇到7篇明显由AI生成的论文,从医学影像分析到供应链优化研究,不同领域的文章却有着相似的"套路化"表达。这让我意识到:AI论文工具已经从早期的…

2026/7/23 11:55:40 阅读更多 →
ARM Cortex-M低功耗设计:时钟门控原理与Tiva™实战配置

ARM Cortex-M低功耗设计:时钟门控原理与Tiva™实战配置

1. 项目概述 在嵌入式系统开发,尤其是电池供电的物联网节点、便携式医疗设备或远程传感器中,功耗管理从来都不是一个“锦上添花”的选项,而是决定产品成败的核心指标。我经历过不止一个项目,前期功能跑得飞起,一到功耗…

2026/7/23 11:55:40 阅读更多 →
智能体技术构建指南:从核心原理到生产实践

智能体技术构建指南:从核心原理到生产实践

1. 智能体构建的行业背景与核心价值在数字化转型浪潮中,智能体技术正从实验室走向产业应用的最前沿。不同于传统自动化工具,现代智能体具备环境感知、自主决策和持续学习三大核心能力。根据Gartner最新预测,到2026年超过40%的企业系统将内置智…

2026/7/23 11:55:40 阅读更多 →
年终总结 PPT 自动排版大乱斗:2026 年六款 AI 实测对比

年终总结 PPT 自动排版大乱斗:2026 年六款 AI 实测对比

一、测试说明 (一)输入内容:约 2000 字,含年度业绩、项目复盘、失败教训、明年 OKR、团队感谢 (二)页数要求:10 页左右 (三)评分维度(满分 5 星&#xff0…

2026/7/23 11:55:40 阅读更多 →
安全门窗技术选型:玻璃/结构/安装/售后四维硬指标

安全门窗技术选型:玻璃/结构/安装/售后四维硬指标

【技术摘要】门窗安全涉及玻璃、结构、安装、售后 4 个层面。本文基于 GB 15763.2-2005《建筑用安全玻璃 第2部分:钢化玻璃》、GB 17565-2007《防盗安全门通用技术条件》等规范,做技术选型分析。一、技术背景与适用范围本文围绕"安全门窗技术选型&a…

2026/7/23 11:55:40 阅读更多 →
TLV320AIC3253音频编解码器:集成miniDSP的超低功耗嵌入式音频方案解析

TLV320AIC3253音频编解码器:集成miniDSP的超低功耗嵌入式音频方案解析

1. 项目概述与核心价值在嵌入式音频系统设计中,音频编解码器扮演着“咽喉要道”的角色。它不仅是连接模拟世界与数字世界的桥梁,更是决定最终音质、功耗和功能上限的关键。过去,工程师常常面临一个两难选择:要么选择一颗功能简单、…

2026/7/23 11:54:40 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻