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