go使用ssh执行脚本文件

目的:在go语言中ssh连接服务器,上传shell文件并执行

代码:

import 	"golang.org/x/crypto/ssh"
func InitHardware(username string, password string, ip string, ipv6 string, port int, arch string, ipStack string, classType string, classVersion string) error {logger.Debug("start InitHardware:", ip, port)installBootstrap := "xxx.sh" //自己的脚本文件名fullpath := path.Join(util.GetRootDir(), "sbin", installBootstrap) //脚本文件所在目录installBootstrapUrl := configure.GetBootstrapPackageUrl()if arch == "aarch64" { //判断机器架构以便替换文件urlinstallBootstrapUrl = strings.Replace(installBootstrapUrl, "/x86_64/", "/aarch64/", 1)}//连接配置config := &ssh.ClientConfig{User: username,Auth: []ssh.AuthMethod{ssh.Password(password),},HostKeyCallback: ssh.InsecureIgnoreHostKey(),}if len(ipv6) > 0 && ipv6 != "" {ip = "[" + ipv6 + "]"}conn, err := ssh.Dial("tcp", ip+":"+strconv.Itoa(port), config)if err != nil {return err}defer func(conn *ssh.Client) {err := conn.Close()if err != nil {}}(conn)session, err := conn.NewSession()if err != nil {return err}defer func(session *ssh.Session) {err := session.Close()if err != nil {}}(session)// 执行 "echo $HOME" 命令以获取用户目录var stdoutBuf strings.Buildersession.Stdout = &stdoutBuferr = session.Run("echo $HOME")if err != nil {logger.Errorf("get user dir, error: error=%s", err)return err}// 获取用户目录并删除末尾的换行符userDir := strings.TrimSpace(stdoutBuf.String())contents, err := os.ReadFile(fullpath)if err != nil {logger.Errorf("read shell file, error: fullpath=%s, error=%s", fullpath, err)return err}// 上传 shell 文件到远程服务器remoteShellFile := path.Join(userDir, installBootstrap)session1, err := conn.NewSession()if err != nil {return err}defer session1.Close()var b bytes.Buffersession1.Stdout = &berr = session1.Run(fmt.Sprintf("echo '%s' > %s", contents, remoteShellFile))if err != nil {logger.Errorf("upload shell file, error: remoteShellFile=%s, error=%s", remoteShellFile, err)return err}session2, err := conn.NewSession()if err != nil {return err}defer func(session2 *ssh.Session) {err := session2.Close()if err != nil {}}(session2)session2.Stdout = os.Stdoutsession2.Stderr = os.Stderrlogger.Infof("==========ipv6test==========")logger.Infof(fmt.Sprintf("sh %s %s %s %s %s %s", remoteShellFile, installBootstrapUrl, woodpeckerRpc, cmdRpc, emsRpc, ipStack))err = session2.Run(fmt.Sprintf("sh %s %s %s %s %s %s %s %s", remoteShellFile, installBootstrapUrl, woodpeckerRpc, cmdRpc, emsRpc, ipStack, classType, classVersion))if err != nil {logger.Errorf("InitHardware ip:%s, error: ", ip, session2.Stderr)return err}return nil
}

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

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

相关文章

算法题解记录29+++全排列(百日筑基)

一、题目描述 题目难度:中等 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示…

华为网络设备高频命令

1.system-view • 用法:在用户视图下执行 system-view 命令。 • 作用:进入系统视图,以便进行配置性的操作。 • 场景:当需要对设备进行系统级的配置时。 2.sysname XXX • 用法:执行 [Huawei]sysname XXX 命令。…

iCopy for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)

Mac分享吧 文章目录 效果可留存文本、图片、文件等复制历史记录也可根据关键字进行历史记录检索点击一下,可复制双击两下,复制内容,并将信息粘贴至鼠标指针处 一、准备工作二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹…

Audio2Face相关建模BS绑定对应表

文章说明 相信大家都可以在网上看到52点位的ARKit绑定对照表,但英伟达旗下Audio2Face这款软件出来的数据应该如何映射到BS上边,都比较迷茫。 所以对于Unity方面的46点位在建模时的对照图,我这边总结了一下。发出来供大家参考,如果…

简易版 | 代码生成器(包含插件)

一、代码生成器 先导入依赖 <!-- Mybatis-Plus --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version> </dependency><!-- 代码生成器 --…

Cisco Packet Tracer实验(五)不同vlan间的通信简单配置

1&#xff0e;单臂路由(图) 环境&#xff1a;一台路由器&#xff0c;一台二层交换机&#xff0c;两台pc机 单臂路由&#xff08;Single Arm Routing&#xff09;是指在网络架构中&#xff0c;只有一个物理接口&#xff08;单臂&#xff09;连接到路由器三层交换机&#xff0c;而…

碉堡了!云原生大佬撰写的K8s学习指南,有点炸裂,建议运维都收藏!

在这个数字化转型的时代&#xff0c;容器化和云原生技术已成为软件开发的重要趋势。【Kubernetes】作为云原生领域的旗舰项目&#xff0c;不仅是一种容器编排工具&#xff0c;更是构建现代、弹性和可扩展应用程序的基础平台。 因此&#xff0c;对于运维人员来说&#xff0c;学…

基于51单片机的音乐彩灯设计

基于51单片机的音乐彩灯设计 &#xff08;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 由STC单片机ADC0809模块LM386功放模块喇叭音频接口发光二极管电源构成 1.通过音频线输入可以播放电脑、手机、MP3里面的音乐。 2.AD对音频…

17.零代码八爪鱼采集器数据采集与数据导出——如何导出不同格式数据和数据推送到数据库

首先&#xff0c;多数情况下免费版本的功能&#xff0c;已经可以满足绝大多数采集需求&#xff0c;想了解八爪鱼采集器版本区别的详情&#xff0c;请访问这篇帖子&#xff1a; 3.无代码爬虫八爪鱼采集器工具介绍——个人版本、团队版本的适用性_八爪鱼采集器 有单机版本吗-CSDN…

苹果电脑病毒怎么处理 苹果电脑病毒查杀用什么软件 苹果电脑病毒软件

苹果电脑并不是完全免疫于病毒的威胁&#xff0c;尤其是在使用了一些不安全的软件或网站后&#xff0c;可能会感染一些恶意程序&#xff0c;导致电脑运行缓慢&#xff0c;数据丢失&#xff0c;甚至被黑客控制。那么&#xff0c;苹果电脑病毒怎么处理呢&#xff1f;苹果电脑病毒…

高级视频编码器性能对比(H265、VP9、AV1)

1、背景介绍 目前在视频编解码器中&#xff0c;H264已经成为绝对的主流&#xff0c;被大部分设备、浏览器所支持。虽然有更先进的编码器推出&#xff0c;但是受限于推广速度和设备支持成本&#xff0c;一直未能成为主流。 今年公司目标是持续降本增效&#xff0c;现在将”屠刀…

vue分页

先看效果 再看代码 <!-- 分页 --><div v-if"pageParams.pageCount > 1" class"flex justify-end mt-6"><n-paginationv-model:page"pageParams.page" v-model:page-size"pageParams.pageSize" :page-count"pa…

Unity3D MMORPG加载背包配置表详解

一、引言 在Unity3D开发的大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;中&#xff0c;背包系统扮演着至关重要的角色。它不仅是玩家存储和管理物品的地方&#xff0c;更是游戏经济体系和交互系统的重要组成部分。背包的配置表加载是背包系统实现的关键步骤之一&am…

Hazelcast 分布式缓存 在Seatunnel中的使用

1、背景 最近在调研seatunnel的时候&#xff0c;发现新版的seatunnel提供了一个web服务&#xff0c;可以用于图形化的创建数据同步任务&#xff0c;然后管理任务。这里面有个日志模块&#xff0c;可以查看任务的执行状态。其中有个取读数据条数和同步数据条数。很好奇这个数据…

羊城杯 2020 a_piece_of_java

考点:JDBC反序列化打CC链动态代理类触发readobject 一眼看过去 好像只有一个mysql-connector-java 可以利用jdbc 可能的攻击路径就有1) Mysql服务器任意文件读取 2) JDBC反序列化打依赖链 出现了一个不常见的依赖库 serialkiller 做了反序列化的过滤器 可以尝试查看其源码 htt…

2000-2022年上市公司员工、工资数据

2000-2022年上市公司员工、工资数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;年份、股票代码、股票简称、行业名称、行业代码、省份、城市、区县、行政区划代码、城市代码、区县代码、首次上市年份、上市状态、员工人数_人、应…

Windows 与 Java 环境下的 Redis 利用分析

1 前言 在最近的一次攻防演练中&#xff0c;遇到了两个未授权访问的 Redis 实例。起初以为可以直接利用&#xff0c;但后来发现竟然是Windows Java (Tomcat)。因为网上没有看到相关的利用文章&#xff0c;所以在经过摸索&#xff0c;成功解决之后决定简单写一写。 本文介绍了…

【工程2区】毕业神刊 —— 1-2个月录用!非黑!非预警!

【欧亚科睿学术】 电力能源类SCIE ✅ 进展超顺 ✅ 录用率高 ✅ 领域相关均可 【期刊简介】IF&#xff1a;1.0-2.0&#xff0c;JCR2区&#xff0c;中科院4区 【版面类型】正刊&#xff0c;仅少量版面 【终审周期】走期刊部系统&#xff0c;预计3个月左右录用 【检索情况…

Linux基本知识----3

1.什么是linux&#xff1f; Linux继承了Unix以网络为核心的设计思想&#xff0c;是一个性能稳定的多用户网络操作系统 2.为什么 Linux 体系结构要分为用户空间和内核空间的原因&#xff1f; Linux 为了保护内核的安全&#xff0c;把系统分成了两部分。 3.BASH和DOS之间的基…

使用SpringBoot对接Kafka

Kafka是什么&#xff0c;以及如何使用SpringBoot对接Kafka 一、Kafka与流处理 我们先来看看比较正式的介绍&#xff1a;Kafka是一种流处理平台&#xff0c;由LinkedIn公司创建&#xff0c;现在是Apache下的开源项目。Kafka通过发布/订阅机制实现消息的异步传输和处理。它具有高…