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