代码之家  ›  专栏  ›  技术社区  ›  Scott

ssh隧道到计算机并创建另一个隧道到第三个服务器

ssh
  •  0
  • Scott  · 技术社区  · 14 年前

    我需要在我无法直接访问的服务器上做一些工作。我确实可以访问我的公司网络(通过VPN)。如果我在那个网络上,我可以直接访问服务器。但是,由于某种原因,当我在VPN上时,我不能直接访问服务器。

    所以,我需要ssh到一个中间Ubuntu框中,然后创建一个从该框到服务器的ssh隧道。

    然后,我可以在我的笔记本电脑上完成我的工作,并通过一个本地隧道将其发送到一个(在我的Ubuntu设备上)通向服务器的外部隧道。

    但是我不知道如何做一个隧道来创建到第三个服务器的另一个隧道。

    有什么想法吗?

    谢谢, 斯科特

    2 回复  |  直到 14 年前
        1
  •  1
  •   Andrew    14 年前

    你想达到什么目的?如果你只想在服务器上得到一个shell,那么ssh进入Ubuntu框,然后ssh从那里进入服务器。

    如果您想访问服务器上的其他网络资源,那么您需要将一个端口从服务器(在您无法访问的地方)转发到Ubuntu框(在您可以访问的地方)。看看ssh中的-l选项。

    编辑:

    正在将文件复制到服务器:

    tar c path/* | ssh ubuntuName 'ssh serverName "tar x"'
    

    复制资料:

    ssh ubuntuName 'ssh serverName "tar c path/*"' | tar x
    

    显然你需要改变 ubuntuName , serverName path/* 为了你想要的。要使用rsync,需要 -E 选项和将一个ssh命令包装到另一个ssh命令中的相同技巧。在阅读了您的评论之后,我会说,对您的问题最一般的回答是,技巧是让ssh在目标机器上执行一个命令。您可以通过在机器名后面指定命令作为参数来实现这一点。如果您使用ssh作为要执行ssh的目标命令,那么您将得到您正在寻找的两个跃点行为。然后,只是玩引号的问题,直到一切都正确地转义。

        2
  •  0
  •   Jim Nutt    14 年前

    它只是一个双端口前进。将端口从PC转发到Ubuntu框,然后在Ubuntu框上将这些目标端口转发到最终端点。我已经有一段时间没有做过命令行ssh(被困在Windows地狱中:),所以我不能提供您需要的命令行。另一种可能性是使用ssh中内置的socks代理功能。