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