3 个回答

先说一句话结论:跳板机等于 SSH 隧道 x2


假设有:

  • 本机 Local
  • 数据库 Db
  • 远程服务器 Remote
  • 远程跳板机(网关)Gateway

场景一:Remote 能直连 Db,但 Local 不能直连 Db、而能连 Remote,此时需要 SSH 隧道 x1,即 Local → Remote → Db。

场景二:Remote 能直连 Db,但 Local 不能直连 Db、且不能连 Remote,此时需要 SSH 隧道 x2,即 Local → Gateway → Remote → Db。

场景二在内网下比较常见,一般是 Db 不对外网开放、甚至只监听 127.0.0.1,并且 Db 所在的那台 Remote 机器本身就处于内网下,需要统一个跳板机才能连(这个跳板机只负责连 Remote,不负责连 Db,它也连不上 Db),就会出现这种情况。不过一般这种情况下其实企业更多的是自己搭 VPN 而不是用跳板机…… (话又说回来了 VPN 其实严格来说也是一种跳板机,只不过它这里的跳板机专指 SSH Tunneling 了)

大概区别就是:
SSH 隧道像是挖了一条直达数据库的地下通道(加密),通过一个入口。

跳转服务器像是通过多个安全检查站,每到一个站都需要验证身份,最终到目的地。

区别

SSH隧道

技术原理:

  • 端口转发:SSH隧道通过端口转发(Port Forwarding)技术,将本地端口的数据流通过SSH协议加密后转发到远程服务器的指定端口。
  • 加密通信:所有通过隧道传输的数据都经过SSH协议加密,确保数据在传输过程中不被窃听或篡改。

例子:小明的数据库连接

场景一:使用SSH隧道

  • 小明在家里工作,需要访问公司内部的数据库服务器。公司有一台SSH服务器(ssh.company.com),通过它可以安全地访问内部网络。

1.配置SSH隧道:

  • SSH服务器: ssh.company.com
  • 端口: 22(默认SSH端口)
  • 用户名: xiaoming
  • 认证方式: 密码或SSH密钥
  • 本地端口: localhost:5432(假设数据库是PostgreSQL)
  • 远程端口: db.company.com:5432

2.连接过程:

  • 小明在DBeaver中配置SSH隧道,输入上述信息。
  • DBeaver通过SSH隧道连接到ssh.company.com,然后将本地端口5432的数据转发到db.company.com:5432。
  • 小明在DBeaver中连接到localhost:5432,就像直接连接到数据库一样。

跳转服务器

技术原理:

  • 多跳连接:跳转服务器(Jump Server)用于在多跳网络环境中建立连接。DBeaver首先连接到跳转服务器,然后通过跳转服务器再连接到最终的数据库服务器。
  • 链式连接:每一跳的连接都可以使用不同的协议和认证方式,灵活应对复杂的网络环境。

场景二:使用跳转服务器

  • 小明需要通过一个跳转服务器(jump.company.com)才能访问最终的数据库服务器(db.company.com)。

1.配置跳转服务器:

  • 跳转服务器: jump.company.com
  • 端口: 22
  • 用户名: xiaoming
  • 认证方式: 密码或SSH密钥

2.配置目标服务器:

  • 目标服务器: db.company.com
  • 端口: 5432
  • 用户名: dbuser
  • 密码: dbpassword

3.连接过程:

  • 小明在DBeaver中首先配置跳转服务器,输入jump.company.com的连接信息。
  • 然后,在DBeaver中配置最终目标数据库服务器的信息。
  • DBeaver先连接到jump.company.com,然后通过跳转服务器连接到db.company.com。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏