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),步骤如下:
- 安装扩展:
composer require creocoder/yii2-ssh-tunnel
- 修改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
相关产品推荐
相关产品推荐

