You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2应用通过SSH连接远程MySQL的配置示例求助

Yii2 通过 SSH 隧道连接远程 MySQL 配置方案

这个方案完全可行,但Yii2原生的yii\db\Connection并不直接支持SSH隧道的配置,可通过以下两种方式实现:

方法一:手动建立 SSH 隧道

先在运行Yii2应用的主机上,通过命令行手动建立SSH端口转发隧道(使用RSA密钥认证):

ssh -i /path/to/your/rsa_private_key -L 3307:remote-mysql-host:3306 ssh-login-user@ssh-host-address

参数说明:

  • -i 指定RSA私钥文件的路径
  • -L 3307:remote-mysql-host:3306 将本地3307端口的请求转发到远程MySQL服务器的3306端口
  • ssh-login-user@ssh-host-address 是SSH服务器的登录用户名和主机地址

隧道建立后,Yii2的数据库配置就和连接本地MySQL几乎一致,只需把端口改成转发的本地端口:

<?php
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;port=3307;dbname=remote_database_name',
    'username' => 'remote_mysql_username',
    'password' => 'remote_mysql_password',
    'charset' => 'utf8',
];

注意:手动建立的隧道需要保持运行状态,可通过nohup命令或配置成系统服务实现后台持续运行。

方法二:使用扩展自动管理 SSH 隧道

如果需要自动管理隧道的创建和销毁,可以使用第三方扩展(如creocoder/yii2-ssh-tunnel),步骤如下:

  1. 安装扩展:
composer require creocoder/yii2-ssh-tunnel
  1. 修改Yii2的数据库配置文件,替换原生连接类为扩展提供的类,并添加SSH相关配置:
<?php
return [
    'class' => 'creocoder\sshtunnel\Connection',
    // SSH 隧道配置
    'sshHost' => 'ssh-host-address',
    'sshPort' => 22, // 默认SSH端口,可根据实际修改
    'sshUser' => 'ssh-login-user',
    'sshPrivateKey' => '/path/to/your/rsa_private_key', // RSA私钥文件路径
    // MySQL 远程连接配置
    'dsn' => 'mysql:host=remote-mysql-host;port=3306;dbname=remote_database_name',
    'username' => 'remote_mysql_username',
    'password' => 'remote_mysql_password',
    'charset' => 'utf8',
];

这种方式会在每次建立数据库连接时自动创建SSH隧道,连接断开时自动关闭隧道,无需手动维护,更适合生产环境使用。

额外注意:

  • 确保运行Yii2应用的服务器能正常访问SSH服务器的22端口
  • RSA私钥文件权限需设置为600,避免权限过高导致认证失败

内容的提问来源于stack exchange,提问作者Papa Joe Dee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:37:49