Usando Oracle db a través del túnel ssh. Error "ORA-12541: TNS: no oyente"
sqlplus tunnel (6)
Hola, tengo un problema al acceder a Oracle DB desde nuestro centro de datos a través de un túnel.
Tenemos un centro de datos bastante estándar con una máquina accesible desde el exterior (puse su IP en el archivo / etc / hosts como dc) y dentro de Oracle DB. La dirección IP de nuestra base de datos Oracle en la red interna es 192.168.1.7
Para crear un túnel, estoy usando el comando:
ssh -L 1521:192.168.1.7:1521 root@dc
y, por supuesto, funciona (a veces también agrego algo de depuración -vv para ver si algo está pasando).
Ahora la parte difícil: conectarse a Oracle. Instalé el cliente instantáneo 11.2. y mi tnsnames.ora se ve así:
testdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbname)
)
)
Y cuando intento conectarme usando el comando:
./sqlplus username/pass@testdb
Comienza a conectarse a través del túnel (lo veo en la depuración ssh) pero luego falla diciendo:
./sqlplus username/pass@testdb
SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 13 20:46:07 2010
Copyright (c) 1982, 2009, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
Enter user-name:
Cuando intento ejecutar este mismo comando cuando estoy en la intranet, funciona (obviamente, la única diferencia es que en el HNS de tnsnames.ora tenemos 192.168.1.7 y no el localhost).
También traté de usar la simple línea de comando:
./sqlplus username/pass@//localhost:1521/testdb
o alternativamente
./sqlplus username/pass@//localhost:1521/testdb
Pero nada ayudó :)
Agradecería cualquier ayuda o sugerencia. ¿Me estoy perdiendo alguna bandera ssh para que sea posible?
Probablemente el archivo de registro:
***********************************************************************
Fatal NI connect error 12541, connecting to:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DBNAME)(CID=(PROGRAM=sqlplus@velvet)(HOST=velvet)(USER=johndoe))))
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
Time: 13-JAN-2010 20:48:42
Tracing not turned on.
Tns error struct:
ns main err code: 12541
TNS-12541: Message 12541 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 511
TNS-00511: Message 511 not found; No message file for product=network, facility=TNS
nt secondary err code: 111
nt OS err code: 0
donde terciopelo es mi nombre de host local y johndoe es mi nombre de usuario local. ¿Por qué se envía al otro lado?
ACTUALIZAR:
Después de investigar un poco más desde dentro del centro de datos, parece que: - la primera conexión va al puerto 1521 - pero luego se redirige a sqlplus al número de puerto> 3300, que es diferente cada vez e incrementa en 3 (al menos algunos intentos) Lo hice) - cuando estamos tratando de conectarnos a través de un túnel, sqlplus intentará conectarse a localhost y obviamente fallará
Entonces, el error "No Listener" proviene probablemente del hecho de que no estamos redireccionando esos puertos. ¿Hay alguna manera (probablemente alguna opción en el archivo tnsnames.ora) de forzar que se use un puerto específico?
Tal vez su oyente aún no ha comenzado. Pruebe ejecutar el comando " lsnrctrl start ".
MJ! Su túnel es solo para la conexión tcp inicial, su propio puerto LISTEN no está tunelizado, y probablemente no se haya implementado. El cortafuegos debería permitirle una conexión de regreso, similar al FTP activo. Todos los puertos para Oracle están documentados bastante extensamente a partir de la página 670 de "Building Internet Firewalls" 2 / E Capítulo 23, párrafo: Oracle SQL * Net y Net8. Puedes verlo en SafariBooksOnline.com
ISBN 1565928718
También una buena explicación es la conexión a una base de datos Oracle a través de un shell seguro SSH que funcionó para mí.
Abra masilla y en la página de sesión, ingrese el nombre de un servidor y asegúrese de que SSH esté marcado. El servidor puede ser cualquier servidor con el que tenga un nombre de usuario y contraseña para iniciar sesión. ¡Yo uso uno aquí llamado BLUEBIRD ya que lo tengo!
En la página conexión-> ssh-> túneles, desmarque ambas opciones en la parte superior ("Los puertos locales aceptan ..." y "Los puertos remotos hacen lo mismo").
Ingrese 9999 (o cualquier puerto por encima de 1024 como Puerto de origen.
En el destino, ingrese el host y el puerto de la base de datos según los nombres. En mi caso, este es un servidor llamado GREENBIRD y un puerto de
Ingrese esto como servidor: puerto.
Como el puerto que se reenvía está en su escritorio, verifique la opción "Local". Deje marcado "Auto" también para la versión IP.
Haga clic en el botón Agregar. Verá L9999 greenbird: 1521 (su diferencia será) en la lista de puertos reenviados.
Vaya a la página de la sesión nuevamente, ingrese un nombre para su sesión guardada y haga clic en guardar.
Haga clic en abrir. Proporcione un nombre de usuario y contraseña para el servidor (BLUEBIRD en mi caso). Iniciarás sesión en una sesión ssh normal en el servidor llamado BLUEBIRD.
Mire en Metalink ID 361284.1 (Editar: efectivamente no es público, pero encuentre la información aquí )
Parece que Oracle Connection Manager sería tu opción. Básicamente maneja los redireccionamientos del puerto dentro del firewall . No lo he usado antes, así que no puedo aconsejarlo más.
Actualización: Otra forma de hacerlo sería usar MTS, configurar despachadores con ciertos puertos y abrir estos puertos en el firewall. No tendría que instalar software adicional para esto, pero la conexión a través del servidor compartido puede requerir aumentar LARGE_POOL_SIZE, entre otras consideraciones. Por lo tanto, aún necesitaría la función DBA para cambiar el parámetro DISPATCHERS. También deberías rebotar la base de datos.
Normalmente esto debería funcionar. No utilizaría un puerto de escucha predeterminado como entrada para el túnel ssh, pero ese no debería ser el problema. Tampoco utilizaría la cuenta raíz para crear la conexión ssh, preferiblemente una cuenta regular dedicada. ¿Está utilizando servidores compartidos o la base de datos pasa a ser una base de datos RAC con una configuración de equilibrio de carga? Una buena explicación es aquí ¿Cómo puedo conectarme a ORACLE DB a través de la cadena de túnel ssh (túnel doble, servidor en la red de la empresa)? , un poco más complicado .....
actualización de la verificación de DbVisualizer , ahora tiene tunelización ssh integrada. Creo que vale la pena intentarlo al menos. No es gratis, pero bueno. Plataforma multiplataforma y multi y muy flexible.