亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go x/crypto/ssh -- 如何通過堡壘節點建立到私有實例的 ssh 連接

Go x/crypto/ssh -- 如何通過堡壘節點建立到私有實例的 ssh 連接

Go
鴻蒙傳說 2021-12-20 16:33:29
我想實現這個場景:在 AWS 上,我有一個 VPC,其中部署了一個公共和私有子網。在公共子網中,我有一個“堡壘”實例,而在私有子網中,有一個節點運行一些服務(也稱為“服務實例”)。通過使用 *nux ssh 命令,我可以執行以下操作以從本地筆記本電腦連接到“服務實例”:ssh -t -o ProxyCommand="ssh -i <key> ubuntu@<bastion-ip> nc %h %p" -i <key> ubuntu@<service-instance-ip>我有一個 Go 程序,想做以下幾件事:ssh 從“本地筆記本電腦”通過“堡壘”連接到“服務實例”使用連接會話運行一些命令(例如“ls -l”)將文件從“本地筆記本電腦”上傳到“服務實例”我已經嘗試過但無法實現與執行相同的過程ssh -t -o ProxyCommand="ssh -i <key> ubuntu@<bastion-ip> nc %h %p" -i <key> ubuntu@<service-instance-ip>誰能幫我舉個例子?謝謝!順便說一句,我發現了這個: https://github.com/golang/go/issues/6223,這意味著它絕對能夠做到這一點,對吧?
查看完整描述

1 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

您可以在沒有nc命令的情況下使用“x/crypto/ssh”更直接地執行此操作,因為有一種方法可以從遠程主機撥打連接并將其顯示為net.Conn.


一旦有了ssh.Client,您就可以使用該Dial方法net.Conn在您和最終主機之間建立虛擬機。然后你可以把它變成一個新的ssh.Connwith ssh.NewClientConn,并創建一個新的ssh.Clientwithssh.NewClient


// 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 is an ssh client connected to the service host, through the bastion host.


查看完整回答
反對 回復 2021-12-20
  • 1 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號