Go : ssh操作(四)批处理

简介

有的时候我们不只是进行单纯的上传, 下载, 指令, 而是多个动作的组合操作

代码

batch.go

package clientimport ("errors""github.com/pkg/sftp""golang.org/x/crypto/ssh"
)type BatchCode intconst (R_COMMAND = BatchCode(0) + iotaR_DOWNLOADR_UPLOAD
)type UDInfo struct {RemotePath stringLocalPath string
}type Command struct {Cmd string
}type Mission struct {BatchCode BatchCodeInfo interface{}
}type Batch interface {RunBatch(ms []*Mission) error
}type batch struct {done       uintsshClient  *ssh.ClientsftpClient *sftp.Client
}func (b *batch) RunBatch(ms []*Mission) error {b.done = 0for _, m := range ms {switch m.BatchCode {case R_COMMAND : if err := b.runCommand(m.Info.(Command).Cmd); nil != err { return err }case R_UPLOAD  : if err := b.runUpload(m.Info.(UDInfo)); nil != err { return err }case R_DOWNLOAD: if err := b.runDownload(m.Info.(UDInfo)); nil != err { return err }default:return errors.New("unsupport")}b.done += 1}return nil
}func (b *batch) runCommand(cmd string) (err error) {var c = commander{b.sshClient}_, err = c.RunCommand(cmd)return
}func (b *batch) runUpload(info UDInfo) error {var up = uploader{sftpClient: b.sftpClient,}return up.Upload(info.LocalPath, info.RemotePath)
}func (b *batch) runDownload(info UDInfo) error {var down = downloader{sftpClient: b.sftpClient,}return down.Download(info.RemotePath, info.LocalPath)
}

测试用例

package clientimport ("fmt""github.com/pkg/sftp""golang.org/x/crypto/ssh""net""testing""time"
)func TestBatch_RunBatch(t *testing.T) {config := ssh.ClientConfig{User: "root", // 用户名Auth: []ssh.AuthMethod{ssh.Password("xxxx")}, // 密码HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {return nil},Timeout: 10 * time.Second,}sshClient, err := ssh.Dial("tcp","192.168.31.75:22", &config) //IP + 端口if  err != nil {fmt.Print(err)return}defer sshClient.Close()var sftpClient *sftp.Clientif sftpClient, err = sftp.NewClient(sshClient); err != nil {return}defer sftpClient.Close()var bat = &batch{sshClient: sshClient, sftpClient: sftpClient}var ms = make([]*Mission, 0)ms = append(ms, &Mission{BatchCode: R_COMMAND, Info: Command{Cmd: "ls"}})ms = append(ms, &Mission{BatchCode: R_DOWNLOAD, Info: UDInfo{RemotePath: "/root/test", LocalPath: "./"}})ms = append(ms, &Mission{BatchCode: R_UPLOAD, Info: UDInfo{RemotePath: "/root/", LocalPath: "CL/test"}})err = bat.RunBatch(ms)fmt.Println(err)
}

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

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

相关文章

【深度学习:Foundation Models】基础模型完整指南

【深度学习:Foundation Models】基础模型完整指南 什么是基础模型?基础模型背后的 5 项人工智能原理根据大量数据进行预训练自我监督学习过度拟合微调和快速工程(适应性强)广义的 基础模型的用例基础模型的类型计算机视觉基础模型…

最新版CleanMyMac X4.14.7智能清理mac磁盘垃圾工具

CleanMyMac X是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化Mac系统,…

借助GPT理解 “ Android中 点击弹框外部 取消弹框”

在平常的开发工作中 或 阅读技术博客/书籍 时,难免会遇到我们不懂的知识点,网络上搜索的资料 需要有准确性,系统性,可实操性。 这样的资料查询很费时间且还不一定能找到,但是如果借助训练过的的gpt,就会省下…

[Kubernetes]7. K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群)

上一节讲解了[Kubernetes]6. k8s Pod配置管理ConfigMap & Secret以及传递环境变量的使用,k8s的命名空间以及使用kubens管理命名空间的使用,这里来介绍一下Helm的使用 一.Helm相关介绍 1.介绍 在 kubernetes 系统上部署容器化应用时需要事 先手动编写资源配置清单文件 以…

Prometheus实战篇:Prometheus监控docker

Prometheus实战篇:Prometheus监控docker 准备环境 监控docker 为了能够获取到Docker容器的运行状态,用户可以通过Docker的stats命令获取当前主机上运行容器的统计信息,可以查看容器的CPU利用率,内存使用量,网络IO总量以及磁盘IO总量等信息. docker stats除了使用命令以外,用户…

【占用网络】SurroundOcc:基于环视相机实现3D语义占用预测 ICCV 2023

前言 本文分享“占用网络”方案中,来自ICCV 2023的SurroundOcc,它基于环视相机实现3D语义占用预测。 使用空间交叉注意力将多相机图像信息提升到3D体素特征,即3D体素Query到2D图像中查询融合特征的思想。 然后使用3D卷积逐步对体素特征进行…

如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理

首先,需要用到的这个工具: 百度 密码:qwu2蓝奏云 密码:2r1z 打开工具,切换到“文章工作域”(嗯...默认就是) 找到这个,多内容断行分割 点击打开,出现如下窗口设置 相关的…

Netty-Netty基础应用与了解

前言 Netty 的优势 1、 API 使用简单,开发门槛低; 2、功能强大,预置了多种编解码功能,支持多种主流协议; 3、定制能力强,可以通过 ChannelHandler 对通信框架进行灵活地扩展; 4、性能高…

【教程】通过Excel宏/Pandas两种方法来自动添加渐变数据条

这种数据真的很难看懂: 一般会对其画折线图或者数据条,相比起来就非常直观: 但是每一列都要手动这样设置就非常累了,所以这里就用到了VBA宏(或者Pandas)。 VBA宏方法 从这里进入宏: 随便写一个宏名后点创建&#xff1…

PyTorch项目源码学习(1)

PyTorch PyTorch是一个开源的深度学习框架,项目地址 https://github.com/pytorch/pytorch 在学术工作中的使用频率较高。 其主体由C开发,PyTorch是Torch的Python调用版本。学习PyTorch项目源代码的目的在于学习其中的实现方法与技巧,增加训练…

LangChain 69 向量数据库Pinecone入门

LangChain系列文章 LangChain 50 深入理解LangChain 表达式语言十三 自定义pipeline函数 LangChain Expression Language (LCEL)LangChain 51 深入理解LangChain 表达式语言十四 自动修复配置RunnableConfig LangChain Expression Language (LCEL)LangChain 52 深入理解LangCh…

毕业论文idea

三大模块 分级、分类、系统 多看医学图像处理毕业论文。 Swin Transformer的模型表现不如MobileViT 使用高像素的数据集在云服务器上训练时,如果您发现Swin Transformer的模型表现不如MobileViT,这可能由几个因素导致: 模型架构与数据匹配…

机器视觉在OCR字符检测的应用

在产品质量 检测过程中,对于字符、条码等标识信息的识别、读取、检测是非常重要的一部分,比如在食品饮料包装检测中,生产日期 、保质期 、生产批号 、条码等字符信息是产品管理和追溯必不可缺的,因此利用机器视觉技术进行OCR字符采…

【实用技巧】Windows电脑向iPhone或iPad传输视频方法2:有线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频,以 iPhone 为例,iPad的操作方法类似,本文不作赘述。 二、所需原材料 Windows 电脑(有 USB-A 或 USB-C 接口)(桌面或其它文件夹中…

Web组件的使用

文章目录 1 概述2 加载网页加载在线网页加载本地网页 3 网页缩放文本缩放 4 Web组件事件Web组件处理JS confirm事件 5 Web和JavaScript交互启用JavaScriptWeb组件调用JS方法JS调用Web组件方法 6 处理页面导航7 调试网络应用8 参考链接 1 概述 相信大家都遇到过这样的场景&…

Mixtral Moe代码解读

一直对稀疏专家网络好奇,有些专家没被选中,那么梯度是否为0,这一轮被选中有梯度,下一轮没被选中无梯度,模型可以训练收敛吗? 由于每个token都会选择topk个专家,所以在每一轮epoch中,…

python工具-udp-tcp-client-server-demo

python工具-udp-tcp-client-server-demo server tcp-server: python xxx.py -type tcp -ip “127.0.0.1” -port 1234udp-server: python xxx.py -type udp -ip “127.0.0.1” -port 1234 client python xxx.py -type udp -ip “127.0.0.1” -port 1111python xxx.py -type tc…

依赖Kafka的Go单元测试例解

Kafka[1]是Apache基金会开源的一个分布式事件流处理平台,是Java阵营(最初为Scala)中的一款杀手级应用,其提供的高可靠性、高吞吐量和低延迟的数据传输能力,让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。 在…

pytorch无法把共享内存写入文件

环境: 在容器中跑pytorch模型的训练 问题表现: ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm). Traceback (most recent call last): File "/root/anaconda3/lib/python3.8/m…

flutter getTemporaryDirectory()的使用

下面是上传音视频流的截图,先保存在缓存,然后请求接口,成功或者失败会删除文件。 可以在Device File Explorer查看, Android: 会返回 /data/data//cache 这个目录,是应用私有的缓存目录。 iOS: 会返回 Library/Caches 下的一个…