SpringBoot + Xshell + MySQL实现本地通过跳板机连接生产数据库

我们有时候经常跑本地代码连接线上生产数据库调试数据,但生产数据库很可能只支持特定IP连接,我们此时就可以通过Xshell的隧道功能实现跳板机功能。

1、在Xshell中配置好隧道

源主机就是你现在的主机,目标主机和端口填写线上真实数据。完成点完成
在这里插入图片描述

2、配置SpringBoot数据源

将连接指定到本地的Xshell设置的端口,数据库名和用户名密码一定要记得改,我最开始就是忘记改了发现连接不上。
在这里插入图片描述

怎么搭建mysql的机器,通过跳转机器链接,而不是通过直接开发3306端口链接-CSDN博客

通过跳板机(也称作跳转服务器或SSH中转服务器)连接MySQL服务器,是一种增强数据库访问安全的方法。这种方式不需要在MySQL服务器上直接开放3306端口给外部网络,而是通过SSH隧道(或端口转发)在跳板机和MySQL服务器之间创建一个加密的通道。以下是基本步骤:

1. 准备工作

  • 跳板机:一个可以从外部访问,并且能够访问内网MySQL服务器的中间服务器。
  • MySQL服务器:配置好,能够从跳板机访问。
  • 客户端机器:需要访问MySQL数据库的本地机器。

2. 在跳板机上创建SSH隧道

在客户端机器上执行SSH命令,创建一个SSH隧道。这个隧道会将本地机器上的一个端口转发到MySQL服务器的3306端口上。假设跳板机的地址是jump.host,MySQL服务器内网地址是mysql.server.internal

ssh -L [本地端口]:mysql.server.internal:3306 [用户]@jump.host -N
  • [本地端口]:这是你选择的任意本地机器上的未使用端口,例如13306
  • mysql.server.internal:3306:这是MySQL服务器的内网地址和MySQL服务的默认端口。
  • [用户]@jump.host:这是你的用户名和跳板机的地址。
  • -N:表示不执行远程命令,只进行端口转发。

3. 从本地机器连接MySQL服务器

现在,你可以使用本地端口通过SSH隧道连接MySQL服务器。如果你使用的是MySQL客户端命令行工具,命令如下:

mysql -h 127.0.0.1 -P [本地端口] -u [MySQL用户] -p
  • 127.0.0.1:指的是本地机器。由于SSH隧道已经将连接从本地端口转发到了MySQL服务器,所以这里使用本地地址。
  • [本地端口]:之前在SSH命令中指定的本地端口。
  • [MySQL用户]:你的MySQL用户名。

注意事项

  • 确保跳板机上的SSH服务已启用,并且你有足够的权限创建SSH隧道。
  • 你可能需要在跳板机的SSH配置中启用端口转发(通常默认启用)。
  • 这种方法提高了安全性,因为不需要在MySQL服务器上直接开放3306端口,而是利用SSH加密了数据传输。

通过上述步骤,你可以安全地通过跳板机访问MySQL服务器,而不需要直接在MySQL服务器上开放3306端口。

nvaicat mysql ssh 跳板机(堡垒机???)连接服务器 - 牛奔 - 博客园 (cnblogs.com)

跳板机(Jump Server),也称堡垒机,是一类可作为跳板批量操作远程设备的网络设备,是系统管理员或运维人员常用的操作平台之一。

 

正常的登录流程

使用ssh命令登录跳板机;

登录跳板机成功后,在跳板机分配的终端中使用ssh命令再登录开发机,跳板机和开发机之间采用带密码的ssh验证,因此需要输入ssh私钥的密码。

 

 

ssh隧道(通过跳板机)连接mysql

案例:

A服务器   B服务器   C服务器mysql

现在mysql服务器C只能通过内网访问,B服务器就能通过内网连接访问到mysql

A服务器无法直接连接C服务器mysql,所以要通过跳板机(跳板机指的是B服务器)连接mysql

实现:

在A服务器下面执行命令

ssh -p {ssh_port} -i {rsa_file} -fNL {local_port}:{mysql_ip}:{mysql_port} {ssh_user}@{ssh_ip}
ssh -p 22 -i ./id_rsa_jump -fNL 33060:mysql_ip:3306 jump@jump_ip # 实例
 
命令详解:
  • -p {ssh_port}: 指定跳板机器的ssh服务的端口
  • -i {rsa_file}:指定连接跳板机的ssh公钥,由跳板机的ssh服务端生成,如果不指定公钥或者公钥验证失败则会弹出密码进行登录。
  • -f:需进行ssh认证
  • -N:只进行端口转发,不执行命令
  • -L:指定连接服务的格式 [bind_address:]port:host:hostport
  • {local_port}:本地监听的端口
  • {mysql_ip}:转发到的mysql的ip或域名
  • {mysql_port}:转发到的mysql的端口
  • {ssh_port}:跳板机的
  • {ssh_user}:跳板机的ssh用户名(如果为rsa登录,则ras对应的用户名和ssh_user一致)
  • {ssh_ip}:跳板机的ip或域名
A服务器执行以上命令就可以连接远程MySQL了
 
测试连接:
首先查看端口有没有监听执行: ss -ntl

看到3307端口说明监听了;

使用mysql命令开始连接:

mysql -h127.0.0.1 -P3307 -uroot -p    (此命令需要注意点-h要填,-P端口是大写,不然会连接到自己本地的mysql而不是远程的mysql)

连接成功之后执行命令:

show databases;

看到的是自己远程mysql服务器上的数据库就说明连接成功了;

 

navicat使用跳板机连接数据库-ssh(sqlyog同理)

1. 目标数据库的域名/IP,端口,用户名,密码:如图1

2. 这时候不要点OK!选择SSH这个tab

3. 选中User SSH Tunnel;填写跳板机域名/IP,用户名,密码(注意:端口22不要变)

4. 点击OK,保存链接,打开链接完成通过ssh通道连接跳板机达到连接数据库的目的navicat使用跳板机连接数据库-ssh(sqlyog同理)。不用每次都重复的在shell里输入数据库链接了

 

推荐

公司内部,为了安全起见,经常会把开发机和线上机从网络上面分离开,有时候出于排查问题,需要通过跳板机连接到线上数据库。这里使用了 SwitchHosts 管理工具让开发、测试、线上环境切换更容易。

host管理工具SwitchHosts的使用
SwitchHosts高效切换host -- 让开发,测试,线上环境切换更容易

 

posted @ 2024-05-10 09:19  CharyGao  阅读(184)  评论(0)    收藏  举报