首頁 >後端開發 >Golang >如何在 Go 中使用 SSH 和 PEM 金鑰連接到伺服器?

如何在 Go 中使用 SSH 和 PEM 金鑰連接到伺服器?

Linda Hamilton
Linda Hamilton原創
2024-11-04 07:36:30792瀏覽

How to Connect to a Server Using SSH and a PEM Key in Go?

透過 Go 使用 SSH 和 PEM/金鑰連接到伺服器

使用 SSH 安全地連接到遠端伺服器是系統管理和自動化中的一項常見任務。在處理 Linux 伺服器時,SSH 金鑰驗證通常比密碼驗證更受青睞,因為它提高了安全性。本文示範如何在 Go 中使用 PEM(隱私增強郵件)金鑰與遠端伺服器建立 SSH 連線。

Go 中的 ssh 套件提供了對 SSH 連線的支援。要使用 PEM 金鑰進行連接,我們需要先將金鑰解析為 ssh.Signer 物件。我們可以使用 ssh.ParsePrivateKey 函數來實現此目的。一旦我們有了 ssh.Signer,我們就可以使用 ssh.PublicKeys 建立一個 ssh.AuthMethod 物件。這個 ssh.AuthMethod 將用於向伺服器進行身份驗證。

準備好 ssh.AuthMethod 後,我們現在可以設定 ssh.ClientConfig 物件。我們在此配置中指定使用者名稱、身份驗證方法和其他必要參數。配置完成後,我們使用 ssh.Dial 函數建立連線。然後,我們可以使用 ssh.NewSession 建立一個新會話並在遠端伺服器上執行命令。

以下是概述步驟的範例程式碼片段:

<code class="go">import (
    "io"
    "log"
    "net"
    "os"

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

func main() {
    pemBytes, err := os.ReadFile("my_key.pem")
    if err != nil {
        log.Fatal(err)
    }

    signer, err := ssh.ParsePrivateKey(pemBytes)
    if err != nil {
        log.Fatal(err)
    }

    auths := []ssh.AuthMethod{ssh.PublicKeys(signer)}
    cfg := &ssh.ClientConfig{
        User: "my_user",
        Auth: auths,
    }

    conn, err := ssh.Dial("tcp", "remote_host:22", cfg)
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    session, err := conn.NewSession()
    if err != nil {
        log.Fatal(err)
    }
    defer session.Close()

    stdout, err := session.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }
    if err := session.Run("whoami"); err != nil {
        log.Fatal(err)
    }

    if _, err := io.ReadAll(stdout); err != nil {
        log.Fatal(err)
    }
}</code>

按照以下步驟並使用根據提供的程式碼片段,您可以在Go 程式中使用PEM 金鑰建立與遠端伺服器的安全SSH 連線。

以上是如何在 Go 中使用 SSH 和 PEM 金鑰連接到伺服器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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