登录
首页 >  Golang >  Go问答

Go x/crypto/ssh -- 如何通过堡垒节点建立到私有实例的 ssh 连接

来源:Golang技术栈

时间:2023-04-14 10:49:24 156浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《Go x/crypto/ssh -- 如何通过堡垒节点建立到私有实例的 ssh 连接》,本文主要会讲到golang等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我想实现这个场景:在 AWS 上,我有一个 VPC,其中部署了一个公共子网和私有子网。在公共子网中,我有一个“堡垒”实例,而在私有子网中,有一个节点运行一些服务(又名“服务实例”)。通过使用 *nux ssh 命令,我可以执行以下操作从本地笔记本电脑连接到“服务实例”:

ssh -t -o ProxyCommand="ssh -i  ubuntu@ nc %h %p" -i  ubuntu@

我有一个 Go 程序,并且想做以下事情:

  1. ssh 通过“堡垒”从“本地笔记本电脑”连接到“服务实例”
  2. 使用连接会话运行一些命令(例如“ls -l”)
  3. 将文件从“本地笔记本电脑”上传到“服务实例”

我已经尝试过但无法实现与做相同的过程

ssh -t -o ProxyCommand="ssh -i  ubuntu@ nc %h %p" -i  ubuntu@

谁能帮我举个例子?谢谢!

顺便说一句,我发现了这个: https://github.com/golang/go/issues/6223,这意味着它肯定能够做到这一点,对吧?

正确答案

您可以更直接地使用“x/crypto/ssh”而不使用nc命令来执行此操作,因为有一种方法可以从远程主机拨打连接并将其显示为net.Conn.

一旦你有了一个ssh.Client,你就可以使用该方法在你和最终主机之间Dial获得一个虚拟。net.Conn然后你可以把它变成一个新ssh.Conn的 with ssh.NewClientConn,并创建一个新ssh.Client的 withssh.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.

今天关于《Go x/crypto/ssh -- 如何通过堡垒节点建立到私有实例的 ssh 连接》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表