为了账号安全,请及时绑定邮箱和手机立即绑定

使用 golang 反向 SSH

使用 golang 反向 SSH

Go
MM们 2021-11-15 15:45:51
我有一台服务器和一台远程计算机。现在我想通过 SSH 访问远程计算机,但它可能位于 NAT 后面。这就是我想要反向 SSH 连接的原因之一。这个想法是建立从远程计算机到服务器的连接,并使用此连接通过 SSH 从服务器到远程计算机进行通信。使用 OpenSSH,这很容易。我从远程计算机打开反向 SSH 隧道:ssh- R 19999:localhost:22 user@192.168.0.10现在我可以从服务器端使用它:ssh localhost -p 19999我想通过远程计算机上的 go 应用程序和 go SSH 库实现相同的行为。服务器仍将使用 OpenSSH,因此不应更改。我知道如何从 go 通过 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())    }}
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

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

为了支持这种行为,我需要将打开连接的侦听器提供给远程端 go 中的 ssh 服务器实现。比我想的更复杂,但它有效。

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


查看完整回答
反对 回复 2021-11-15
?
catspeake

TA贡献1111条经验 获得超0个赞

您使用Client.Listen(或Client.ListenTCP) 在服务器上设置转发端口。

然后,您可以像接受任何其他网络侦听器一样接受来自返回的侦听器的连接。


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信