phpMyAdmin本身不支持SSH隧道,需在Web服务器上手动建立本地端口转发并配置host为'127.0.0.1'、port匹配隧道端口,同时确保数据库用户授权包含堡垒机内网IP,否则即使隧道正常也会因认证失败报#2002错误。
phpMyAdmin 本身不支持 SSH 隧道,所谓“通过 SSH 隧道连接”,实际是靠你在运行 phpMyAdmin 的服务器上手动建立本地端口转发,再让 phpMyAdmin 去连 127.0.0.1 上的某个本地端口——它完全感知不到背后有跳板机。
这个错误几乎总是因为连接参数和隧道状态不匹配,不是 phpMyAdmin 坏了,而是没对上。典型表现是页面提示 Cannot log in to the MySQL server,但你确认密码没错、MySQL 服务也正常。
host 写成了 'localhost':PHP 会尝试走 Unix socket,直接绕过你的 SSH 隧道;必须改成 '127.0.0.1'
ps aux | grep ssh,看不到那条 -L 33061:10.0.1.10:3306 命令,说明隧道断了config.inc.php 文件(比如改了模板文件却没覆盖实际加载的那个):3306 而不是你配的 :33061,说明配置根本没加载隧道必须建在运行 phpMyAdmin 的机器上(比如 web01),不能建在你本地电脑。否则 phpMyAdmin 根本访问不到那个端口。
ssh -fN -L 33061:10.0.1.10:3306 [email protected],其中 33061 是本地空闲端口,10.0.1.10:3306 是内网数据库地址-fN:后台运行且不执行远程命令,只做端口转发web01 上跑 ssh-copy-id [email protected],否则隧道启动就卡住autossh 或 systemd --user service,例如 autossh -M 0 -fN -L 33061:10.0.1.10:3306 [email protected]
改 config.inc.php 时,只动这三项,其他保持默认即可:
$cfg['Servers'][$i]['host'] = '127.0.0.1';(严禁用 localhost)$cfg['Servers'][$i]['port'] = '33061';(必须和 ssh -L 后面的本地端口完全一致)GRANT ALL ON *.* TO 'dbuser'@'10.0.0.5';,而不是 'dbuser'@'%' 或 'dbuser'@'localhost'
最容易被忽略的是数据库授权范围——隧道连得通,但认证失败,90% 是因为 MySQL 用户只允许从 localhost 或某个公网 IP 登录,而实际连接来源是堡垒机的内网出口 IP。这个细节不检查,其他全对也白搭。