首頁  >  文章  >  後端開發  >  如何使用 Go 的 ssh 套件建立帶有金鑰的 SSH 連線?

如何使用 Go 的 ssh 套件建立帶有金鑰的 SSH 連線?

Linda Hamilton
Linda Hamilton原創
2024-11-02 12:47:30866瀏覽

How to Establish SSH Connections with Keys Using Go's ssh Package?

使用Go 的ssh 套件透過金鑰建立SSH 連線

使用金鑰透過SSH 連線到遠端伺服器是系統管理中的一項基本任務和開發營運。 Go 程式語言提供了 ssh 套件來處理 SSH 連線。然而,瀏覽其文件可能具有挑戰性。

問題出現了:我們可以使用金鑰檔案或帶有 Go ssh 套件的私鑰連接到 SSH 伺服器嗎?

文件說明目前僅支援「密碼」認證方式。不用擔心,因為完全可以使用金鑰檔案或私鑰建立連線。

解鎖此功能的關鍵在於將密鑰檔案轉換為 ssh.Signer,然後將其嵌入到 ssh 中.AuthMethod.PublicKeys。以下是詳細說明該過程的範例程式碼片段:

<code class="go">import (
    "crypto/ecdsa"
    "crypto/x509"
    "encoding/pem"
    "fmt"
    "io/ioutil"
    "log"
    "net"

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

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

    block, _ := pem.Decode(pemBytes)
    privKey, err := x509.ParseECPrivateKey(block.Bytes)
    if err != nil {
        log.Fatal(err)
    }

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

    auths := []ssh.AuthMethod{ssh.PublicKeys(signer)}

    cfg := &ssh.ClientConfig{
        User: "username",
        Auth: auths,
    }
    cfg.SetDefaults()

    client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
    if err != nil {
        log.Fatal(err)
    }

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

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

    fmt.Println(string(stdout))
}</code>

此增強的程式碼可以處理金鑰檔案和私鑰,提供更全面的解決方案。在範例中,使用了 ecdsa 金鑰,但該概念適用於任何類型的私鑰。

結論:

Go ssh 套件允許建立 SSH 連線使用按鍵。可以理解的是,文件可能看起來很複雜。透過利用 ssh.PublicKeys 並使用 ssh.Signer 將金鑰轉換為適當的格式,可以無縫連接並執行基本的系統任務。

以上是如何使用 Go 的 ssh 套件建立帶有金鑰的 SSH 連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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