AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1528627
Accepted
BadAndy
BadAndy
Asked: 2020-02-27 16:36:42 +0800 CST2020-02-27 16:36:42 +0800 CST 2020-02-27 16:36:42 +0800 CST

如何对多个跳转服务器使用反向 ssh 隧道

  • 772

在下面的示例中,我将如何将 SSH 隧道用于架构?

场景:我物理上登录到 Windows PC Local,并希望使用端口 3389 将桌面远程连接到 Windows PC Remote。Windows PC Local 和网络之间有防火墙 Linux 服务器只允许我从本地 PC SSH 到 Linux网络 A 上的服务器。是否可以在网络 A Linux 服务器上建立一条反向隧道到 Windows PC Remote?我认为必须建立 3 个或更多隧道并将其连接在一起才能完成此任务,但我不知道该怎么做或知道是否可能。

Windows PC Local    Linux Server   .-,(  ),-.         can ssh                     Linux Server    Windows PC Remote
     __| _             __| _    .-(          )-.----------------->    .-,(  ),-.       __| _         __  _|        
    [__]|=|-----------[__]|=|---(  Network A   )                   .-(          )-.   [__]|=|-------[__]|=|        
    /::/|_|           /::/|_|   '-(         ).-'                   (    Network B  )--/::/|_|       /::/|_|        
                                   '-.( ).-'   <-----------------   '-(        ).-'                                
                                                      can't ssh        '-.( ).-'                                   
ssh ssh-tunnel
  • 1 1 个回答
  • 2024 Views

1 个回答

  • Voted
  1. Best Answer
    filbranden
    2020-02-27T21:13:01+08:002020-02-27T21:13:01+08:00

    实际上,您可以通过两台 Linux 服务器之间的单个 SSH 隧道来完成此操作,更具体地说,从网络 A 上的隧道到网络 B 上的隧道(它可以 SSH 的方向)。

    假设您想将远程桌面连接到远程 Windows 机器(网络 B 一侧的机器),那么您需要一个直接的SSH 隧道。

    (如果您想通过在网络 A 中的 Linux 服务器上启动的 SSH 连接将服务从网络 A 中的机器公开到网络 B 中的机器,则反向 SSH 隧道将是这样。)

    要了解如何设置,让我们为所涉及的机器和接口分配一些 IP 地址和名称。否则,很难理解哪些确切的地址和名称去了哪里。

    让我们将这些地址用于本地网络:

    Windows PC Local               Linux Server           .-,(  ),-.   
     __| _                            __| _            .-(          )-.
    [__]|=|--------------------------[__]|=|-----------(  Network A   )
    /::/|_|                          /::/|_|           '-(         ).-'
        192.168.10.7      192.168.10.4    301.2.3.4       '-.( ).-'    
        workstation7        linrouter4    a.example.com                
    

    然后是远程网络的这些地址:

                             Linux Server               Windows PC Remote
       .-,(  ),-.                 __| _                            __  _|
    .-(          )-.             [__]|=|--------------------------[__]|=|
    (    Network B  )------------/::/|_|                          /::/|_|
     '-(        ).-'     321.9.8.7    172.24.10.99     172.24.10.76      
        '-.( ).-'    b.example.net    gateway1.lan     remote76.lan      
    

    仅可视化两个 Linux 服务器之间的互连:

    Linux Server         .-,(  ),-.     can ssh                             Linux Server
     __| _            .-(          )-.------------>    .-,(  ),-.                 __| _ 
    [__]|=|-----------(  Network A   )              .-(          )-.             [__]|=|
    /::/|_|           '-(         ).-'              (    Network B  )------------/::/|_|
         301.2.3.4       '-.( ).-'   <------------   '-(        ).-'     321.9.8.7      
         a.example.com                  can't ssh       '-.( ).-'    b.example.net      
    

    因此,为了创建一个允许您连接到远程 Windows 机器的 SSH 隧道,您需要这样做:

    linrouter4$ ssh -L 192.168.10.4:3389:remote76.lan:3389 [email protected]
    

    一个 SSH 连接已建立,workstation7您可以从 Windows 机器打开到默认端口的 RDP 连接linrouter4,您将获得到remote76.lan远程主机上 Windows 机器的转发连接。

    隧道是使用-LSSH 的标志配置的,它最多占用 4 个地址或端口,以冒号分隔。

    第一对指示在本地主机上接收连接的地址和端口。IP 地址必须是本地主机接口上配置的地址,否则主机将无法接收该地址的连接...我们linrouter4在本地网络中使用 's 地址,所以本地网络中的其他机器将能够访问该隧道。

    下一项是本地端口。我们使用默认端口 3389,因此我们的 RDP 客户端可以在默认端口上连接。如果您正在使用该端口配置多个 SSH 隧道或在该计算机上运行其他服务,您可能需要选择备用端口,在这种情况下,您必须重新配置您的 RDP 客户端以连接到非标准端口。对于这个简单的示例,我们使用默认端口绕过它。

    最后一对地址和端口是gateway1.lan当连接到达另一端的隧道时我们的目标主机 ( ) 应该连接的地址和端口。remote76.lan请注意,名称解析将在目标主机上进行,因此即使本地linrouter4机器无法解析该名称,我们也可以使用名称。

    最后,我们有了远程端口,它还是默认的 3389。

    然后,我们使用普通参数连接到远程主机,使用其外部地址 ( ) 并在必要时b.example.net指定用户名 ( )。myuser也可以传递身份验证或其他设置所需的任何其他参数。

    该-L标志也可以只取 3 个项目而不是 4 个,在这种情况下,本地地址被跳过。例如,-L 3389:remote76.lan:3389。但这只会在 localhost (127.0.0.1) 上公开它,这意味着它linrouter4本身可以通过隧道打开连接,但不能打开连接到该机器的其他主机。(换句话说,我们需要完整的规范。)

    最后,请注意我们为远程主机使用了主机名,但我们也可以使用 IP。对于本地主机也是如此,我们可以使用名称而不是 IP,假设该机器将名称解析为内部 IP。

    也可以工作:

    • -L 192.168.10.4:3389:172.24.10.76:3389
    • -L linrouter4:3389:remote76.lan:3389

    此外,您可以'*'在本地使用让该主机接受任何接口上的连接:-L '*:3389:remote76.lan:3389'. (请注意,您在使用时需要使用引号,*因为 shell 可以将其解释为元字符。)使用*并不理想,因为这意味着来自网络 A(互联网?)的访问可能能够使用 SSH 隧道到达远程网络中的受保护主机。使用明确的仅限内部地址绝对是一种更安全的配置(即使您可能将该隧道暴露给整个内部网络,除非您明确设置防火墙以仅允许特定主机。)

    • 1

相关问题

  • OpenVPN 可以连接,流量有效但我不在本地网络中

  • 如何使用 GUI 远程访问 EC2 控制台

  • 需要 LDAP 身份验证 * 和 * ssh 身份验证

  • 加载密钥“ec256.pem”:尝试从私钥生成公钥时抛出无效格式

  • 为什么 chown 600 id_rsa 修复权限问题?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve