Necesitas acceso a una interfaz web, una base de datos PostgreSQL o un servicio de administración que solo escuche en 127.0.0.1Abrir el puerto en el firewall del servidor sería rápido, pero entonces este servicio sería accesible desde una red en la que no debería estar.
A túnel SSH Esto lleva la conexión a su sesión SSH. Para accesos ocasionales, prefiero este método: el servicio permanece cerrado públicamente y solo la máquina que abre el túnel puede usarlo. Sin embargo, debe elegir la redirección correcta y verificar la dirección de escucha, especialmente con -R.

Reenvía un puerto a tu máquina usando -L
Redirección local -l Abre un puerto en tu máquina y luego reenvía las conexiones a un destino accesible desde el servidor SSH. Su forma general es la siguiente:
ssh -L dirección_local:puerto_local:host_destino:puerto_destino usuario@servidor_ssh
Para acceder a una interfaz HTTP que solo escucha en el puerto 80 del servidor remoto:
ssh -N -T -o ExitOnForwardFailure=yes
-L 127.0.0.1:8080:127.0.0.1:80
[email protected]
-lcrea la redirección local;127.0.0.1:8080es el puerto abierto en su computadora;127.0.0.1:80es el destino visto desde el servidor SSH;-NORTEevita ejecutar un comando remoto;-Tevita asignar una terminal;SalirEnFalloDeReenvío=síLa sesión se cierra si SSH no puede crear la redirección solicitada.
Esta última opción confirma la creación del puerto de escucha. No demuestra que el servicio final esté respondiendo. Siempre pruebe el destino después de abrir el túnel.
Mientras el pedido permanezca abierto, puede probar el servicio desde su ordenador:
curl http://127.0.0.1:8080/
La dirección ubicada a la derecha de -l merece tu atención. En el ejemplo anterior, 127.0.0.1 Esto se refiere al servidor SSH, no a su ordenador. Si el destino se encuentra en otra máquina de la red privada, especifique su dirección privada:
ssh -N -T -o ExitOnForwardFailure=yes
-L 127.0.0.1:15432:10.20.0.15:5432
[email protected]
Su cliente PostgreSQL se conecta entonces a 127.0.0.1:15432El bastión abre la conexión real con 10.20.0.15:5432La base no necesita estar conectada a Internet.
Comprueba que el túnel esté realmente escuchando.
En su computadora, controle el puerto local con ss :
ss -ltnp | grep ':8080'
ss -ltnp | grep ':15432'
Necesitas ver una sesión de escucha en 127.0.0.1asociado con el proceso sshsi ves 0.0.0.0 O El puerto puede ser accesible desde otras interfaces de la máquina. Cierre el túnel y vuelva a crearlo, especificando explícitamente 127.0.0.1.
la guía para Abrir puertos en Linux con ss Detalla la lectura de las direcciones de escucha. Verifique también que el servidor SSH pueda alcanzar el destino final:
curl -I http://127.0.0.1:80/
nc -vz 10.20.0.15 5432
Si se crea el túnel pero eso rizo o su cliente SQL recibe Conexión rechazadaEs probable que SSH esté funcionando. El problema reside en el destino final, que no está escuchando en la dirección o el puerto especificados.
Utilizar -R sin publicar un servicio por error
Redirección remota -R Hace lo contrario. Abre un puerto en el servidor SSH y lo reenvía a un servicio accesible desde tu máquina. Ejemplo: hacer que una aplicación local en el puerto 3000 sea accesible solo desde el servidor remoto.
ssh -N -T -o ExitOnForwardFailure=yes
-R 127.0.0.1:9000:127.0.0.1:3000
[email protected]
En el servidor remoto, un proceso local ahora puede llamar a:
curl http://127.0.0.1:9000/
Por defecto, sshd vincula este puerto remoto a la interfaz de bucle invertido. No reemplazar 127.0.0.1 por 0.0.0.0 O * sin haber decidido quién debería poder unirse al servicio. El parámetro del servidor Puertas de enlace Permite escuchar en otras interfaces. Una simple demostración local puede convertirse entonces en un servicio expuesto a la red.
Evite también la opción -gramo con una redirección local si no desea que otras máquinas se conecten al puerto reenviado. Para mantener su huella mínima, vincule sus túneles a 127.0.0.1 en ambos lados.
Controlar las restricciones del servidor SSH
Si SSH responde prohibido administrativamente Si se rechaza la redirección, consulte la configuración actual del servidor:
sudo /usr/sbin/sshd -T | grep -E '^(allowtcpforwarding|gatewayports|permitopen|permitlisten)'
Permitir reenvío TCP Puede permitir redirecciones locales, redirecciones remotas, ambas o ninguna. PermitirAbrir Y PermitirEscuchar Estas restricciones se utilizan para limitar los destinos y puertos permitidos. En un servidor compartido, estas restricciones son preferibles a otorgar autorización global a todas las cuentas.
Antes de cualquier modificación de /etc/ssh/sshd_config o un archivo bajo /etc/ssh/sshd_config.d/Mantén abierta tu sesión actual y prueba la sintaxis:
sudo /usr/sbin/sshd -t
Reinicie SSH solo después de una devolución exitosa sin errores. El procedimiento completo se explica en el artículo sobre Reiniciar el servicio SSH en UbuntuSi todavía está utilizando una contraseña para esta cuenta, comience por Configura una clave SSH.
Guarda un túnel recurrente en ~/.ssh/config
Para una base de datos de uso regular, evite copiar un comando largo. Agregue un host dedicado en ~/.ssh/config :
Túnel de host-db
Nombre de host bastion.example.net
administrador de usuario
LocalForward 127.0.0.1:15432 10.20.0.15:5432
Salir en caso de fallo de reenvío sí
Intervalo de actividad del servidor 30
ServerAliveCountMax 3
Proteja el archivo y luego abra el túnel al primer plano:
chmod 600 ~/.ssh/config
ssh -N -T base de datos-del-túnel
Recomiendo mantener la primera ejecución en primer plano. Verás inmediatamente cualquier error de clave, puerto local o redirección, y Ctrl + C cierra el túnel correctamente. Si luego lo inicias en segundo plano con -FIdentifique el proceso correcto antes de detenerlo:
pgrep -af 'ssh.*15432'
matar PID
Evitar matar -9 Por reflejo. Una señal normal suele ser suficiente para cerrar la sesión y liberar el puerto.
Diagnóstico de un túnel que no pasa
- Dirección ya en uso Otro proceso es usar el puerto local. Compruébelo con
ss-ltnpo elige otro puerto. - Conexión rechazada : el servicio de destino no está escuchando, o la dirección de destino es incorrecta desde la perspectiva del servidor SSH.
- Prohibido administrativamente : La configuración SSH bloquea la redirección o limita el destino solicitado.
- Se acabó el tiempo : El servidor SSH no puede alcanzar el destino debido a problemas de enrutamiento o a un cortafuegos intermedio.
- túnel de caída : compruebe la estabilidad de la conexión y utilice
Intervalo de actividad del servidoren lugar de un bucle que reinicia SSH sin ningún diagnóstico.
Para obtener detalles de la negociación y las redirecciones, agregue temporalmente -v :
ssh -v -N -T -L 127.0.0.1:8080:127.0.0.1:80 [email protected]
Un túnel SSH protege la transmisión, pero no corrige los derechos de acceso del servicio de destino. Mantén la escucha en la interfaz de bucle local, usa una cuenta SSH con permisos limitados, controla las claves autorizadas y cierra la sesión en cuanto ya no necesites el acceso.
Las sintaxis de -l, -R, -NORTE Y -gramo se detallan en el Documentación oficial del cliente OpenSSHlos controles Permitir reenvío TCP, Puertas de enlace, PermitirAbrir Y PermitirEscuchar se describen en sshd_config(5).