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