首页 > 后端开发 > Golang > 正文

如何在 Golang CLI 中使用 SSH 执行远程命令?

DDD
发布: 2024-11-11 08:12:03
原创
902 人浏览过

How to Execute Remote Commands with SSH in a Golang CLI?

在 Golang CLI 中使用 SSH 执行远程命令

在远程计算机上执行命令是自动化系统管理时的一项常见任务。在 Golang 中,“golang.org/x/crypto/ssh”包提供了一种建立 SSH 连接并远程运行命令的便捷方法。

要在远程计算机上执行命令,请按照以下步骤操作:

  1. 建立 SSH 连接:
    使用ssh.Dial 函数建立到远程机器的 SSH 连接。您需要提供以下信息:

    • 用户名
    • IP 地址或主机名
    • 端口(默认为 22)
    • 身份验证凭据 (密钥或密码)
  2. 创建SSH 会话:
    建立连接后,使用 NewSession 函数创建新会话。会话表示与特定命令的连接。
  3. 配置输入和输出:
    您可以为会话配置标准输入和输出流。例如,您可以将输出重定向到 bytes.Buffer 以捕获命令结果。
  4. 运行命令:
    使用 session.Run 函数执行所需的命令远程机器。此函数将阻塞,直到命令完成。

这是一个示例函数,演示如何运行远程命令并返回其输出:

import (
    "bytes"
    "net"

    "golang.org/x/crypto/ssh"
)

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  // capture output
    session.Stdout = &b // get output

    err = session.Run(cmd)
    return b.String(), err
}
登录后复制

此函数可用于在远程计算机上执行命令,提供了一种通过 Golang CLI 脚本自动执行系统管理任务的便捷方法。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板