phpMyAdmin本身不支持SSH隧道直连,需在Web服务器上预先建立本地端口转发隧道,再配置其$cfg['Servers'][$i]['host']为'127.0.0.1'并指定对应本地端口,强制走TCP连接,且须确保SSH隧道进程存活、MySQL授权内网IP、防火墙放行回环端口。
phpMyAdmin 本身不支持跳板机(SSH 隧道)直连
phpMyAdmin 是纯 PHP 的 Web 应用,它通过 mysqli 或 pdo_mysql 扩展直接连接 MySQL/MariaDB,**不提供 SSH 隧道建立能力**。所谓“配置跳板机”,实际是靠你在 Web 服务器所在机器上**提前建立好本地端口转发**,再让 phpMyAdmin 连这个本地端口——它根本不知道背后是跳板。
必须在 Web 服务器上手动建 SSH 隧道,且需持久化
假设你有一台跳板机 jump.example.com,内网有两台 DB:
10.0.1.10:3306(开发库)、10.0.2.20:3307(测试库)
你需要在运行 phpMyAdmin 的服务器(比如 web01)上执行:
ssh -fN -L 33061:10.0.1.10:3306 jump.example.com ssh -fN -L 33062:10.0.2.20:3307 jump.example.com
关键点:
-
-fN让 SSH 后台运行且不执行远程命令,适合做隧道 - 本地端口(如
33061)不能冲突,且需避开系统保留端口( - 必须确保
web01能无密码登录跳板机(配好~/.ssh/id_rsa+ssh-copy-id) - 重启后隧道会断——要用
systemd --user或autossh守护,否则 phpMyAdmin 连不上就报Connection refused
config.inc.php 中只配本地转发端口,别写内网地址
phpMyAdmin 的 $cfg['Servers'][$i]['host'] 必须填 127.0.0.1 或 localhost,端口填你映射的本地端口。例如:
$i = 0;
$hosts = [
['name' => 'dev-db', 'host' => '127.0.0.1', 'port' => '33061', 'user' => 'dev_user', 'password' => 'xxx'],
['name' => 'test-db', 'host' => '127.0.0.1', 'port' => '33062', 'user' => 'test_user', 'password' => 'yyy'],
];
foreach ($hosts as $h) {
$i++;
$cfg['Servers'][$i]['verbose'] = $h['name'];
$cfg['Servers'][$i]['host'] = $h['host'];
$cfg['Servers'][$i]['port'] = $h['port'];
$cfg['Servers'][$i]['user'] = $h['user'];
$cfg['Servers'][$i]['password'] = $h['password'];
$cfg['Servers'][$i]['auth_type'] = 'config'; // 或 'cookie',但注意密码明文风险
}
注意:
-
$cfg['Servers'][$i]['host']写localhost可能触发 Unix socket,务必写127.0.0.1强制走 TCP - 若用
auth_type = 'cookie',密码由用户每次输入,user/password字段可留空;但若想免密登录,就得填进去——这时要确保config.inc.php文件权限是600,且不在 Web 可访问路径下 - 别在配置里写
10.0.1.10这类内网地址,phpMyAdmin 根本连不到
验证隧道是否生效,比改配置更优先
在 phpMyAdmin 所在服务器上,先手工测试隧道通不通:
mysql -h 127.0.0.1 -P 33061 -u dev_user -p # 应该能正常登录 dev-db
如果这步失败,phpMyAdmin 一定连不上。常见卡点:
- SSH 隧道进程已死(
ps aux | grep 33061看有没有 ssh 进程) - 跳板机的
sshd_config没开AllowTcpForwarding yes - 防火墙(
iptables/ufw)拦了本地回环的 33061 端口 - MySQL 服务端没开
bind-address = 0.0.0.0或没授权dev_user@'10.0.1.10'(注意:授权的是内网 IP,不是127.0.0.1)
跳板机只是中转,最终连的是内网 DB 的权限和网络策略,这点容易被忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











