如何从反向ssh隧道获取远程IP地址

5 ssh ssh-tunnel

我有一个Apache Web服务器通过反向ssh隧道在本地机器上运行,即:

ssh -R*:80:local_machine:8080用户名@ gateway_machine

换句话说,来自gateway_machine上端口80的所有流量都将发送到local_machine上的端口8080.

出于监控目的,我希望知道连接到gateway_machine的远程客户端的IP地址.但是,我的本地Apache服务器会看到来自gateway_machine的IP地址的所有流量.

我的问题:有没有办法设置在gateway_machine上运行的ssh服务器,以便它使用实际的远程IP地址将所有流量发送到local_machine?

Ken*_*ter 2

SSH 协议使用称为“direct-tcpip”的通道类型来转发 TCP 连接。用于打开这些通道之一的协议消息包括正在转发其连接的客户端的地址和端口。因此,您想要的信息可供 ssh 客户端使用(在您的情况下,它打开与转发目标的连接)。

OpenSSHssh客户端在调试级别消息中记录发起者地址和端口,因此如果您使用以下选项运行 ssh,则可以看到它-v

$ ssh -v -R 2000:localhost:1000 localhost
...
debug1: client_request_forwarded_tcpip: listen localhost port 2000, originator ::1 port 51101
Run Code Online (Sandbox Code Playgroud)

这里的发起者地址是 ::1(IPv6 本地主机)和端口 51101。该ssh实用程序不会对该信息执行任何其他操作。

因此,根据您的需求,您可以通过三种方法来收集此信息:

  1. 使用选项调用ssh创建这些转发的进程-v,并安排收集和解析相关的调试信息。
  2. 更改源代码,使其ssh按照您希望的方式处理信息。
  3. 编写您自己的 ssh 客户端来完成您想要的操作。SSH 客户端库适用于大多数现代编程语言。