通过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隧道访问腾讯云轻量数据库,极大地方便了开发过程中的数据库操作。