通过类似 TTY 的链接代理套接字连接的软件

通过类似 TTY 的链接代理套接字连接的软件

我正在寻找一些可以通过 TTY 样式链接远程转发套接字连接的软件。我有两台机器,A 和 B。我在 A 上有管理员权限,但没有 B 的管理员权限,但在机器 B 上,我可以运行不需要管理员权限的任意服务器软件。机器 A 没有公共 IP 地址,但机器 B 有。我能够建立从机器 A 到机器 B 的传出连接并通过它传输任意数据,但我需要的是一些可以在机器 B 上运行的软件,它将接受传入连接,将该连接中的数据发送到机器 A 上运行的进程,然后该进程将启动与机器 A 上运行的服务器的新连接。

不幸的是,我无法使用 ssh 来实现此目的,因为计算机 B 的管理员已将其配置为不允许转发。否则,ssh -R 4567:localhost:1234 machineb从计算机 A 运行就可以实现我想要的效果。

有人知道其他方法吗?作为参考,机器 A 运行 Ubuntu Linux,机器 B 运行 OpenBSD,但我更喜欢一种可跨所有 unix 变体移植的解决方案。

答案1

您可以使用索卡特完成这项工作。您需要socat在机器 A 上安装ncnetcat)并在机器 B 上安装(socat也可以)。以下是如何处理的示例一个 TCP 连接(你可以阅读索卡特的文档来了解如何处理更多内容和定制行为)。

你应该在机器 A 上运行:

  • 您想要公开给机器 B 的服务,假设是端口 8000 上的 Web 服务器(您可以通过运行python3 -m http.serverpython2 -m SimpleHTTPServer在任何您想要公开文件的目录中进行测试);
  • 索卡特在 STDIO 和到 B 的 SSH 连接之间重定向。到 B 的这个 SSH 连接将运行并nc监听特定端口。

因此,在机器 A 上的一个终端会话中运行:

python3 -m http.server

在机器 A 上的另一个终端会话中:

socat EXEC:'ssh user@machineb "nc -l -p 8888"' TCP4:localhost:8000

如果socat在机器B上也有,则可以用nc它替换:

socat EXEC:'ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr"' TCP4:localhost:8000

解释概念:socat将把命令的任何 stdin/stdout 重定向到( )ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr"上的 TCP 客户端连接。该命令将运行与计算机 B 的 SSH 连接并在那里运行,这会将连接到计算机 B 上本地端口 8888 的所有内容 ( ) 重定向到 stdin/stdout ( )。localhost:8000TCP4:localhost:8000socatTCP-LISTEN:8888,reuseaddrSTDIO

是的,索卡特太棒了!

相关内容