首頁  >  文章  >  後端開發  >  如何在 Go 中使用 PEM/Key 進行 SSH 驗證?

如何在 Go 中使用 PEM/Key 進行 SSH 驗證?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-04 01:47:01508瀏覽

How to Authenticate to SSH with a PEM/Key in Go?

在Go 中使用pem/Key 進行SSH 驗證

使用私鑰連接到遠端SSH 伺服器是一種便捷的方法自動化任務並管理資源。 Go程式語言提供了ssh套件,它提供了對建立SSH連接的支援。但是,文件對於如何使用私鑰進行身份驗證可能有些不清楚。

要使用帶有pem 金鑰的SSH 連接到伺服器,您可以按照以下步驟操作:

  1. 取得簽署者:您需要從您的私鑰取得ssh.Signer。這可以使用特定金鑰類型(例如 rsa、dsa、ecdsa)的 ssh.ParsePrivateKey 函數或 ssh.NewSignerFromKey 函數來完成。
  2. 建立 AuthMethod: 轉換 Signer 物件使用 ssh.PublicKeys 函數進入 ssh.AuthMethod。這會包裝簽署者並允許其在 SSH 連接期間用於身份驗證。
  3. 設定 ClientConfig: 設定一個 ssh.ClientConfig 對象,其中包括您的驗證方法、使用者名稱和任何其他內容必要的設定參數。
  4. 撥接連線:使用 ssh.Dial 函數使用您的 ClientConfig 建立與遠端伺服器的連線。
  5. 建立會話: 建立連線後,建立 ssh.Session 以在遠端伺服器上執行指令。

範例:

<code class="go">package main

import (
    "crypto/x509"
    "fmt"
    "io/ioutil"
    "log"
    "net"
    "os"

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

func main() {
    // Parse the private key
    key, err := ioutil.ReadFile("mykey.pem")
    if err != nil {
        log.Fatal(err)
    }

    // Get the signer
    signer, err := ssh.ParsePrivateKey(key)
    if err != nil {
        log.Fatal(err)
    }

    // Switch to using an agent if SSH_AUTH_SOCK is set
    if authSock := os.Getenv("SSH_AUTH_SOCK"); authSock != "" {
        sock, err := net.Dial("unix", authSock)
        if err != nil {
            log.Fatalf("Failed to connect to agent: %v", err)
        }
        _ = sock
        // TODO(harsh)
        // Implement working with agent.
    }

    // Create the AuthMethod
    authMethods := []ssh.AuthMethod{ssh.PublicKeys(signer)}

    // Set up the ClientConfig
    clientConfig := &ssh.ClientConfig{
        User:            "username",
        Auth:            authMethods,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }

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

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

    // Execute a command
    output, err := session.Output("whoami")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Output:", string(output))

    // Close the session and client
    _ = session.Close()
    _ = client.Close()
}</code>

透過以下步驟,您可以使用私鑰建立安全的SSH 連接,並使用Go 標準庫的ssh 套件在遠端伺服器上執行命令。

以上是如何在 Go 中使用 PEM/Key 進行 SSH 驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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