将 SSH 客户端绑定到两个不同的主机地址

将 SSH 客户端绑定到两个不同的主机地址

我有这个端口转发解决方案用于测试目的。有一个远程服务器名为盒子和一台名为,在两个独立的网络上。盒子可以通过互联网访问。

,我运行以下命令:

ssh -R 80:localhost:80 box.sleblanc

这连接到盒子并在端口 80 上设置一个套接字,该套接字将访问 Web 服务,端口 80。当与盒数:80,我发现日志中的 Web 服务似乎来自127.0.0.1。我觉得这很烦人,因为我无法可靠地区分合法来自本地主机的连接和来自代理的连接。

通过将BindAddress选项设置为不同的东西(例如192.168.0.100)与代理的连接实际上显示为该地址,这解决了我的问题,但它强制我的服务在本地主机以外的网络地址上运行。

我发现运行curl --interface 127.0.0.2 localhost:80会产生来自 IP 地址的请求127.0.0.2,这满足了我能够区分合法本地请求与代理请求的要求,但是,当设置BindAddress127.0.0.2, SSH 无法再到达盒子,作为127.0.0.0/8网络不可路由。

最终,我的问题是:如何将 SSH 客户端绑定到多个不同的地址,以便客户端可以连接到 Internet 主机,而远程端口重定向将来自除127.0.0.1?即严格将远程转发端口的连接绑定到本地地址127.0.0.2


玩弄索卡特,我发现了这个解决方案:

% socat TCP4-Listen:1234,fork TCP:127.0.0.1:80,bind=127.0.0.2 &
% ssh -R 80:127.0.0.1:1234 box.sleblanc

这会设置一个套接字,侦听端口 1234 上的传入连接,并通过绑定到本地地址将它们转发到 127.0.0.1:80127.0.0.2。它完全按照预期工作,但我想知道是否有一种方法可以将其简化为 SSH 命令。

相关内容