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

时间:2012-08-17 13:49:28

标签: ssh ssh-tunnel

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

ssh -R *:80:local_machine:8080 username @ gateway_machine

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

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

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

1 个答案:

答案 0 :(得分:2)

SSH协议使用名为" direct-tcpip"的通道类型。用于转发TCP连接。 The protocol message for opening one of these channels包括正在转发其连接的客户端的地址和端口。因此,您想要的信息可供ssh客户端使用(在您的情况下,打开与转发目标的连接)。

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

$ ssh -v -R 2000:localhost:1000 localhost
...
debug1: client_request_forwarded_tcpip: listen localhost port 2000, originator ::1 port 51101

这里的始发者地址是:: 1(IPv6本地主机)和端口51101. ssh实用程序不对信息做任何其他事情。

因此,根据您的需求,您有三种方法来收集此信息:

  1. 使用ssh选项调用创建这些转发的-v进程,并安排收集和解析相关的调试信息。
  2. ssh进行source code次更改,以使其按照您希望的方式处理信息。
  3. 编写您自己的ssh客户端,它可以满足您的需求。 SSH客户端库可用于大多数现代编程语言。