通过SSH端口转发实现本地访问腾讯云轻量数据库

在腾讯云环境中,轻量数据库通常只对轻量云服务器开放内网端口,这对于本地开发环境来说并不友好。为了解决这个问题,我们可以通过轻量云服务器转发SSH端口来实现本地对数据库的访问。以下是详细的步骤:

步骤1:创建端口转发用户

首先,我们需要创建一个专用于端口转发的用户,例如port_forward,并设置一个复杂的密码以增强安全性。

  • bash
  • adduser --shell /usr/sbin/nologin port_forward
复制

步骤2:配置SSH权限

接下来,我们需要为port_forward用户配置SSH权限,以限制其只能访问特定的IP地址和端口。

  • bash
  • vi /etc/ssh/sshd_config.d/port_forward.conf
复制

在配置文件中添加以下内容:

  • makefile
  • Match User port_forward
  • PermitOpen 1.2.4.8:3306 119.29.29.29:3306
  • X11Forwarding no
  • AllowAgentForwarding no
  • PasswordAuthentication yes
  • ForceCommand /sbin/nologin
复制

此配置文件为port_forward用户定义了特殊规则,允许其通过SSH连接到指定的数据库服务器IP和端口,同时禁用了X11转发和SSH代理转发功能,并确保用户登录后立即退出。

步骤3:重启SSH服务

配置完成后,我们需要重启SSH服务以使更改生效。

  • bash
  • systemctl restart ssh
  • systemctl restart sshd
复制

步骤4:创建本地连接脚本

为了简化本地连接流程,我们可以创建一个脚本来自动执行SSH隧道命令。请将以下脚本保存为port_forward.bat,并根据您的实际配置替换相关信息。

  • USERNAME:用于端口转发的用户名(在本例中为 port_forward)
  • HOST:你的远程服务器的 IP 地址或域名
  • PORT:SSH 端口(通常为 22)
  • PASSWORD:用户的密码
  • LOCAL_PORT:你想在本地机器上使用的端口号
  • REMOTE_HOST:数据库服务器的内网 IP 地址
  • REMOTE_PORT:数据库服务的端口(MySQL 通常为 3306)
  • @echo off
  • :: 进入脚本所在目录
  • cd /d %~dp0
  • :: 检查 plink.exe 是否存在
  • if not exist plink.exe (
  • echo "plink.exe not found, downloading..."
  • powershell -Command "Invoke-WebRequest -Uri '<https://the.earth.li/~sgtatham/putty/0.81/w64/plink.exe>' -OutFile 'plink.exe'"
  • if exist plink.exe (
  • echo "plink.exe downloaded successfully."
  • ) else (
  • echo "Failed to download plink.exe. Please check your internet connection."
  • pause
  • exit /b
  • )
  • ) else (
  • echo "plink.exe is already present."
  • )
  • :: 执行 SSH 隧道命令
  • :: 替换用户名、主机、端口、密码、本地端口、远程主机和远程端口
  • set USERNAME=用户名
  • set HOST=remote_host
  • set PORT=22
  • set PASSWORD=密码
  • set HOSTKEY="指纹"
  • set LOCAL_PORT=3307
  • set REMOTE_HOST=19.29.39.49
  • set REMOTE_PORT=3306
  • :: SSH 隧道连接
  • :: 使用 -batch 参数以自动确认提示,-hostkey 参数自动接受指定的主机指纹
  • :: 这个命令我用AI生成搞了我很久,因为AI不知道添加 -N 参数只连接不创建终端
  • plink -batch -L %LOCAL_PORT%:%REMOTE_HOST%:%REMOTE_PORT% -P %PORT% -l %USERNAME% -pw %PASSWORD% -hostkey %HOSTKEY% %HOST% -N
复制

步骤5:获取主机指纹

在运行脚本之前,您需要获取远程服务器的SSH主机指纹。可以通过以下命令获取:

  • plink -P 22 -l 用户名 remote_host
复制

红框中的内容就是指纹,复制下来替换到port_forward.bat就行了。
获取主机指纹.jpg获取主机指纹.jpg

结论

通过上述步骤,您可以在本地机器上通过SSH隧道访问腾讯云轻量数据库,极大地方便了开发过程中的数据库操作。