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/22 9:48:26 阅读更多 →
TMS320F2837xS中断配置全解析:从PIE架构到实战避坑指南

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

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

2026/7/22 9:47:26 阅读更多 →
2026/7/21

2026/7/21

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

2026/7/22 9:47:26 阅读更多 →

最新新闻

专业版语义分析与段落优化技术解析

专业版语义分析与段落优化技术解析

1. 专业版付费服务的核心价值解析"专业版付费服务提供更深层次的语义分析与段落结构优化建议"这个标题背后,实际上指向的是当前内容创作领域的一个专业痛点——如何突破基础写作工具的限制,获得真正具有深度的文本优化建议。作为从业十年的内容…

2026/7/22 10:35:45 阅读更多 →
C++高性能容器与内存检测工具冲突解析:Abseil flat_hash_set与AddressSanitizer兼容性实战

C++高性能容器与内存检测工具冲突解析:Abseil flat_hash_set与AddressSanitizer兼容性实战

1. 项目概述:一个C开发者绕不开的“坑” 如果你是一名C开发者,尤其是那些追求极致性能、热衷于使用现代C库和高级调试工具的朋友,那么你很可能已经或即将遇到我今天要聊的这个“坑”。这个坑的官方名字听起来有点长,叫做“Abseil …

2026/7/22 10:35:45 阅读更多 →
n8n开源工作流自动化工具入门与实践指南

n8n开源工作流自动化工具入门与实践指南

1. n8n自动化工作流入门指南 n8n(发音为"n-eight-n")是一款开源的工作流自动化工具,它通过可视化的节点界面让用户能够轻松连接不同的应用程序并实现任务自动化。作为一个公平代码平台,n8n允许用户在自己的服务器上运行…

2026/7/22 10:35:45 阅读更多 →
2026工作例会内容如何总结对比评测?这3个实用判断标准清晰好用

2026工作例会内容如何总结对比评测?这3个实用判断标准清晰好用

做2026工作例会内容总结的工具对比评测,直接用三个清晰判断标准筛选就行:第一看能不能准确识别产品技术类专业术语,第二看能不能快速输出结构化纪要和待办,第三看跨团队协作导出顺不顺畅。针对产品技术常用的用户调研、需求讨论、…

2026/7/22 10:35:45 阅读更多 →
BOSS直聘企业用户一年多少钱?中小企高性价比招聘平台推荐

BOSS直聘企业用户一年多少钱?中小企高性价比招聘平台推荐

大家好,我是一名资深人力资源管理师。在多年企业招聘渠道搭建与成本管控工作中,经常被企业老板、同行HR问到同一个问题:BOSS直聘企业账号一年到底要花多少钱?中小微企业有没有低成本、高效果的招聘替代平台?当下招聘行…

2026/7/22 10:35:45 阅读更多 →
MCP技术解析:国产AI多智能体协作的突破与应用

MCP技术解析:国产AI多智能体协作的突破与应用

1. 项目概述:MCP技术热潮与国产AI的崛起最近技术圈里有个词突然火了起来——MCP(Multi-agent Collaborative Planning)。这个原本只在学术论文里出现的术语,现在成了各大AI论坛的热门话题。作为一名跟踪AI领域多年的从业者&#x…

2026/7/22 10:34:45 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/21 8:25:39 阅读更多 →

月新闻