phpMyAdmin en Ubuntu con acceso por túnel SSH
phpMyAdmin permite administrar MySQL o MariaDB desde un navegador. Su comodidad también concentra operaciones sensibles: consultas, exportaciones, cambios de tablas y gestión de permisos, según la cuenta utilizada.
Esta guía elige un único escenario: Ubuntu con Apache, PHP mediante módulo y base de datos local, en una máquina de práctica. El panel escuchará en loopback y se abrirá mediante SSH. En un servidor existente con PHP-FPM debes conservar su integración y adaptar el manejador; no mezcles ambos por copiar comandos.
Comprueba los requisitos
Necesitas acceso SSH con una cuenta administrativa, Apache y una base de datos funcional. Crea antes un usuario de base con permisos limitados al proyecto.
El root autenticado mediante socket no suele ser una cuenta adecuada para entrar desde PHP. No cambies esa protección para conseguir que el formulario lo acepte.
sudo apt update
apt-cache policy phpmyadmin
sudo apt install apache2 libapache2-mod-php php-mysql php-mbstring php-zip php-curl phpmyadmin
Durante la configuración del paquete, deja sin seleccionar servidores web para la integración automática: se definirá un sitio dedicado. La pregunta sobre dbconfig-common se refiere al almacenamiento de funciones adicionales de phpMyAdmin; sigue la documentación del paquete para habilitarlo o prescinde de esas funciones en la práctica.
Revisa que no exista otra publicación
Antes de habilitar el panel, inspecciona Apache y su configuración de phpMyAdmin:
sudo apache2ctl -S
sudo apache2ctl -M
sudo ls -l /etc/apache2/conf-enabled/
Si ya hay un alias global de phpMyAdmin, revísalo y retíralo antes de continuar. El objetivo es evitar una segunda ruta de acceso desde un sitio público. Cambiar el nombre del directorio no sustituye esta revisión.
Crea una escucha privada y un sitio
Edita /etc/apache2/conf-available/pma-local.conf y guarda:
Listen 127.0.0.1:8090
<Directory /usr/share/phpmyadmin>
Options -Indexes
AllowOverride None
Require local
</Directory>
<VirtualHost 127.0.0.1:8090>
ServerName localhost
DocumentRoot /usr/share/phpmyadmin
DirectoryIndex index.php
ErrorLog ${APACHE_LOG_DIR}/pma-local-error.log
CustomLog ${APACHE_LOG_DIR}/pma-local-access.log combined
</VirtualHost>
Este fragmento asume que 8090 está libre y que el módulo PHP ya maneja .php. La restricción global del directorio ayuda a cubrir accesos mediante alias, pero otra configuración más específica puede modificar permisos: revisa el resultado completo.
sudo a2enconf pma-local
sudo apache2ctl configtest
Si la sintaxis es correcta, aplica el cambio:
sudo systemctl restart apache2
sudo ss -ltnp '( sport = :8090 )'
curl -I http://127.0.0.1:8090/
El reinicio puede interrumpir peticiones; se utiliza aquí porque la instalación del módulo puede requerirlo. La escucha debe mostrar 127.0.0.1, no 0.0.0.0 ni una dirección pública.
Abre el túnel desde tu computadora
Sustituye usuario y servidor por los datos de tu acceso SSH. El siguiente comando se ejecuta en tu computadora, no dentro del servidor:
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:8090:127.0.0.1:8090 usuario@servidor
Mientras la conexión siga abierta, visita http://127.0.0.1:8090 en ese equipo. El tramo remoto viaja cifrado mediante SSH. Esto no justifica publicar HTTP para administradores en internet ni colocar un proxy público delante del puerto local.
Accede con la cuenta del proyecto y comprueba que solo ve o modifica los recursos autorizados. Una importación de práctica debe usar datos desechables.
Verifica también el rechazo
Desde un equipo exterior, el puerto 8090 del servidor no debe ofrecer el panel. Revisa además que los sitios públicos no expongan /phpmyadmin ni antiguos enlaces simbólicos.
Si aparece código PHP en lugar del formulario, deja de utilizar la ruta hasta corregir el manejador. Si recibes 403 local, revisa reglas Require y registros; si hay un error de conexión a MySQL, distingue credenciales, socket y servicio.
Las cargas grandes están sujetas a límites de PHP y tiempos de ejecución. Para respaldos importantes, utiliza herramientas de línea de comandos y una prueba de restauración, en vez de depender únicamente de la descarga del navegador.
Preguntas frecuentes
¿Ocultar la URL protege phpMyAdmin?
Puede reducir hallazgos casuales, pero no controla quién entra. Mantén restricciones de red, actualizaciones y permisos de base de datos adecuados.
¿Por qué no puedo iniciar sesión como root?
Puede estar configurado para autenticarse por socket mediante el usuario del sistema. Usa una cuenta específica para el proyecto en lugar de debilitar ese mecanismo.
¿Puedo usar la misma configuración con Nginx?
No directamente. Nginx requiere un bloque propio y PHP-FPM con su socket real. Conserva el mismo objetivo de acceso privado y verifica su configuración por separado.
En pocas palabras
El panel utiliza los permisos de la cuenta de base de datos y necesita un acceso de red deliberado. Un puerto en loopback y un túnel SSH permiten una práctica sin abrir la interfaz a internet.
Conclusión
Valida primero el manejador PHP, la escucha local y la cuenta limitada. Mantén documentado cómo accedes al panel y revisa que no aparezca por otro alias o virtual host público.
Para continuar, revisa Cómo instalar Ubuntu desde una USB: paso a paso y Cómo instalar Docker en Ubuntu 24.04: guía práctica paso a paso.
Fuentes y documentación
Documentación de docs.phpmyadmin.net.
