繁体   English   中英

SSH通过多跳进行远程转发

[英]ssh remoteforward over multiple hops

我正在尝试一个多跳SSH隧道,该隧道需要双向路由流量。 我的网络配置是:

我的个人外壳在机器上
machineA可以SSH进入machineB
machineB可以SSH进入machineC
machineC通过以太网本地连接到machineD

在machineD上运行着一项服务,其中machineC将UDP数据包发送到machineD的portX,而machineD通过UDP将其答复发送到machineC的portY。

我已成功完成以下操作:
(来自机器A)
SSH机器B
(来自生成的shell)
SSH机器C
(来自生成的shell)
回显“我的命令” | nc -u machineD portX#发送命令到machineD的服务
nc -ul portY#在machineC的端口上读取结果

我想通过隧道完成所有这些操作,以便可以直接在计算机A上运行自定义脚本来制定服务命令并解析结果。 我在.ssh配置文件中尝试了以下操作:

    host machineB
        hostname x.x.x.x
        user username_machineB
        localforward 1234 machineC:22

    host machineC
        hostname localhost
        user username_machineC
        port 1234
        localforward 1235 machineD:portX
        remoteforward 1236 localhost:portY

我以为可以做到以下几点:
(来自机器A)
SSH机器B
(再次来自machineA)
SSH机器C
(再次来自machineA)
回显“我的命令” | nc -u localhost 1235
数控-ul 1236

但是...似乎不起作用。 我看不到有关1236的任何预期答复。我不确定如何调试此消息。 我也不完全确定machineC的配置中“ localforward”和“ remoteforward”行的格式。 我不知道在评估这些行时谁将被解释为“ localhost”。 我怀疑在machineC上可能禁用了远程转发,但是我想确保首先正确配置了所有其他内容。 我做错了吗?

或者,是否有另一种方法可以实现我的最终目标,而不必更改machineB,C或D上的任何配置? 我想做的是使用machineA以编程方式构造用于machineD的复杂命令,并使用machineA上的脚本来解析结果。

在执行此操作时,您必须向后思考。

因此,基本上machC可以与machD的portX对话。

因此,您真的想在machA上运行此代码:

SSH机器

这是您的最终目标,因为该机器从machD发送和接收

现在您无法直接进入machC,这是您的ProxyCommand条目所在的位置。

host machC
    ProxyCommand ssh machB nc %h %p

因此,您说过machA可以转换为machB没问题。 现在,如果您这样做:

ssh -v machC

您会看到它跳过那些事情。 但是,实际上您希望从machC到machD上的端口进行端口转发和侦听,因此您可以更改machC设置:

host machC
     ProxyCommand ssh machB nc %h %p
     # first part is port on your current shell, second part is relative to machC
     LocalForward 1234 machD:portX
     RemoteForward 1235 localhost:portY

因此,使用上面的示例:

host machineB
    hostname x.x.x.x
    user username_machineB

host machineC
    ProxyCommand ssh machineB nc %h %p
    hostname localhost
    user username_machineC
    localforward 1235 machineD:portX
    remoteforward 1236 localhost:portY

然后可以使用命令:

SSH机器C

使用-v查看跃点和隧道,如果您不关心获取shell,请使用-N。 现在,您可以与本地主机的端口1235进行通信,以发送至machineD portX,并从1236进行读取以侦听machineC portY

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM