gpt4 book ai didi

ssh - 使用 golang 反向 SSH

转载 作者:IT王子 更新时间:2023-10-29 01:27:12 27 4
gpt4 key购买 nike

我有一台服务器和一台远程计算机。现在我想通过 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 从 go 连接到计算机,但如何实现反向部分?

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 返回终端 session 或命令输出(如果您提供的话)。此外,它还允许您通过开放隧道验证从服务器到客户端的连接。

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

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

关于ssh - 使用 golang 反向 SSH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33040563/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com