[英]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.