首頁  >  文章  >  後端開發  >  如何在 Golang CLI 中使用 SSH 執行遠端命令?

如何在 Golang CLI 中使用 SSH 執行遠端命令?

DDD
DDD原創
2024-11-11 08:12:03898瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn