简介
本指南将为您提供执行命令的必要步骤使用 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函数,可以传入以下参数:
单跳连接
如果需要通过堡垒机连接到目标机器,可以嵌套使用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中文网其他相关文章!