首頁 >後端開發 >Golang >如何使用 x/crypto/ssh 透過 Go 中的堡壘主機 SSH 到私有實例?

如何使用 x/crypto/ssh 透過 Go 中的堡壘主機 SSH 到私有實例?

Patricia Arquette
Patricia Arquette原創
2024-12-06 16:42:22306瀏覽

How to SSH into a Private Instance via a Bastion Host in Go using x/crypto/ssh?

使用x/crypto/ssh 透過Go 中的堡壘節點建立與私有實例的SSH 連線

在這種情況下,您的目標是連接透過部署在包含公共和私有的AWS VPC 內的堡壘節點從本地筆記型電腦到私有實例(稱為「服務實例」)子網路。您打算在服務實例上執行命令並從本機筆記型電腦傳輸檔案。

要使用Go 的「x/crypto/ssh」函式庫實現此目的:

  1. 建立與堡壘主機的連線:

    • 建立一個ssh.Client 代表與堡壘主機的連線。
  2. 從Bastion 建立到服務實例的連線:

    • 利用堡壘客戶端的Dial 方法在您和服務之間建立虛擬net.Conn
  3. 為服務實例建立新的SSH 用戶端:

    • 將net.Conn 轉換為ssh.Conn.Conn ssh.NewClientConn.
    • 建立一個新的ssh.Client (sClient) 用於與服務實例通訊。
  4. 執行指令並傳送檔案:

    • 利用 sClient 來在服務實例上執行指令。
    • 實作檔案傳輸機制(例如, SFTP)將檔案從本機筆記型電腦上傳到服務實例。

以下是示範這些步驟的程式碼片段:

// connect to the bastion host
bClient, err := ssh.Dial("tcp", bastionAddr, config)
if err != nil {
    log.Fatal(err)
}

// Dial a connection to the service host, from the bastion
conn, err := bClient.Dial("tcp", serviceAddr)
if err != nil {
    log.Fatal(err)
}

ncc, chans, reqs, err := ssh.NewClientConn(conn, serviceAddr, config)
if err != nil {
    log.Fatal(err)
}

sClient := ssh.NewClient(ncc, chans, reqs)

使用 sClient,您可以執行指令並與服務實例傳送檔案。

以上是如何使用 x/crypto/ssh 透過 Go 中的堡壘主機 SSH 到私有實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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