加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用golang反向SSH

发布时间:2020-12-16 09:26:03 所属栏目:大数据 来源:网络整理
导读:我有一台服务器和一台远程计算机.现在我想通过SSH访问远程计算机,但它可能是在NAT后面.这是我想要反向SSH连接的原因之一. 我们的想法是建立从远程计算机到服务器的连接,并使用此连接通过SSH从服务器与远程计算机进行通信. 使用OpenSSH这很容易.从远程计算机
我有一台服务器和一台远程计算机.现在我想通过SSH访问远程计算机,但它可能是在NAT后面.这是我想要反向SSH连接的原因之一.

我们的想法是建立从远程计算机到服务器的连接,并使用此连接通过SSH从服务器与远程计算机进行通信.

使用OpenSSH这很容易.从远程计算机我打开反向SSH隧道:

ssh- R 19999:localhost:22 user@192.168.0.10

现在我可以从服务器端使用它:

ssh localhost -p 19999

我想在远程计算机上使用go应用程序和go SSH库实现相同的行为.服务器仍将使用OpenSSH,因此不应更改.

我知道如何通过SSH连接到计算机,但如何实现相反的部分呢?

func main() {
    config := &ssh.ClientConfig{
        User: "vagrant",Auth: []ssh.AuthMethod{
            ssh.Password("vagrant"),},}

    conn,err := ssh.Dial("tcp","192.168.0.10:22",config)
    if err != nil {
        panic("Failed to dial: " + err.Error())
    }
}

解决方法

我找到了解决方案.如果提供一个命令,OpenSSH将返回一个终端会话或命令输出.此外,它允许您通过开放隧道验证从服务器到客户端的连接.

为了支持这种行为,我需要在远程端提供与ssh服务器实现的开放连接的监听器.比我想的更复杂,但它有效.

我有一个工作示例服务器here.我只需要在示例代码中为客户端连接上的侦听器交换侦听器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读