首页 >后端开发 >Golang >如何使用 Go CLI 在远程机器上执行命令?

如何使用 Go CLI 在远程机器上执行命令?

Patricia Arquette
Patricia Arquette原创
2024-11-08 10:53:02887浏览

How to Execute Commands on Remote Machines Using Go CLI?

Go CLI 中的远程命令执行

简介

本指南将为您提供执行命令的必要步骤使用 Go CLI 的远程计算机。您将学习如何通过 SSH 连接、使用密钥进行身份验证以及处理单跳连接,从而使您能够在堡垒机和目标计算机上执行命令。

使用 SSH 进行远程执行

第一步涉及利用“golang.org/x/crypto/ssh”包建立 SSH 连接。该软件包提供了安全远程命令执行所需的功能。

示例用法

为了演示它是如何工作的,让我们创建一个名为remoteRun的函数,该函数在远程机器并返回输出:

func remoteRun(user, addr, privateKey, cmd string) (string, error) {
    key, err := ssh.ParsePrivateKey([]byte(privateKey))
    if err != nil {
        return "", err
    }

    config := &ssh.ClientConfig{
        User: user,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
        Auth: []ssh.AuthMethod{
            ssh.PublicKeys(key),
        },
    }

    client, err := ssh.Dial("tcp", net.JoinHostPort(addr, "22"), config)
    if err != nil {
        return "", err
    }

    session, err := client.NewSession()
    if err != nil {
        return "", err
    }
    defer session.Close()

    var b bytes.Buffer
    session.Stdout = &b
    err = session.Run(cmd)
    return b.String(), err
}

用法

要使用remoteRun函数,可以传入以下参数:

  • user:远程机器的用户名
  • addr:远程机器的地址
  • privateKey:用于SSH认证的私钥
  • cmd:要执行的命令

单跳连接

如果需要通过堡垒机连接到目标机器,可以嵌套使用remoteRun函数:

bastionOutput, err := remoteRun("user", "bastion-addr", "key", "ssh user@target-addr -p 22")
if err != nil {
    // Handle error
}
targetOutput, err := remoteRun("user", "target-addr", "key", "command-on-target")
if err != nil {
    // Handle error
}

在此示例中,bastionOutput 变量包含连接到目标计算机的 SSH 命令的输出。从那里,targetOutput 变量包含在目标计算机上执行的命令的输出。

以上是如何使用 Go CLI 在远程机器上执行命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn