首頁 > 後端開發 > Golang > 如何在 Golang 中使用帶有私鑰的 SSH 連接到遠端伺服器?

如何在 Golang 中使用帶有私鑰的 SSH 連接到遠端伺服器?

DDD
發布: 2024-11-05 13:36:02
原創
341 人瀏覽過

How to Connect to a Remote Server Using SSH with a Private Key in Golang?

在Golang 中使用帶有私鑰的SSH 連接到遠端伺服器

利用Go 中的SSH 套件可以透過以下方式方便地連接到遠端伺服器SSH 協定。但是,使用私鑰建立連接需要更深入地了解該軟體包的功能。

SSH 軟體包提供對各種身份驗證方法的支持,包括密碼身份驗證。正如軟體包文件中所提到的,撥號功能允許使用者指定建立連線時所使用的身份驗證方法。要利用私鑰進行身份驗證,我們需要使用套件提供的其他方法。

PublicKeys 函數在這種情況下起著至關重要的作用。它有助於將 SSH 簽署者集合轉換為身份驗證機制。可以使用各種方法來取得這些簽署者,包括從 PEM 位元組表示形式解析它們。透過使用 NewSignerFromKey 函數也支援直接使用 RSA、DSA 或 ECDSA 私鑰的能力。

讓我們考慮一個示範這些概念的實際實現的範例。此範例包含對基於代理的身份驗證的支持,該驗證通常遵循私鑰身份驗證的使用。

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

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

func main() {
    // Establishes a connection to the SSH Agent
    sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
    if err != nil {
        log.Fatal(err)
    }
    agent := agent.NewClient(sock)

    // Acquires signers from the SSH Agent
    signers, err := agent.Signers()
    if err != nil {
        log.Fatal(err)
    }

    // Creates a list of authentication methods using the signers obtained
    auths := []ssh.AuthMethod{ssh.PublicKeys(signers...)}

    // Configures the client using the username and authentication details
    cfg := &ssh.ClientConfig{
        User: "username",
        Auth: auths,
    }
    cfg.SetDefaults()

    // Establishes a connection to the remote server
    client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
    if err != nil {
        log.Fatal(err)
    }

    // Creates a new session in the established connection
    session, err = client.NewSession()
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Successfully established a session!")
}</code>
登入後複製

使用此增強的程式碼範例,可以透過 SSH 使用私鑰遠端連線到伺服器Go 中的套件。還納入了基於代理的身份驗證等其他功能,以便更全面地演示整個過程。

以上是如何在 Golang 中使用帶有私鑰的 SSH 連接到遠端伺服器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板