Pregunta sobre java, postgresql, ssh – Java + SSH + Postgres

2

Estamos implementando un proyecto universitario: un servicio de coche compartido en Java.

Necesitamos resolver un problema vinculado "cómo administrar un servidor de Postgres": la base de datos de PostgreSQL está configurada en un servidor de laboratorio llamado "golem" (130.136.4.sth) accesible solo a través de terminales en la misma subred (130.136.4.0). Tenemos cuatro cuentas (la nuestra) a través de las cuales podemos establecer una conexión ssh con un host.

¿Es posible realizar consultas SQL a través de SSH hacia Postgres DB en JAVA?

Gracias :) Davide

Mira esto. No es la respuesta completa, pero creo que es parte de ella, al menos la conexión SSH:código de ejemplo.com/java/ssh_exec.asp Valentin Vrinceanu
@Brendan: Lo sentimos, pero aún no hemos intentado nada porque no somos expertos en java. Así que buscábamos sugerencias de sus expertos :) Tal vez un patrón de diseño verificado en lugar de soluciones erróneas encontradas en otros lugares. Davide
¿Qué has intentado? ... en serio ... estoy atado de leer las preguntas abiertas ... Brendan

Tu respuesta

3   la respuesta
1

ssh" seguido de cualquier comando, ese comando se ejecuta en el host remoto. Por lo tanto, debería poder ejecutar consultas precocidas en modo batch a través de ssh.

Considere realizar intercambios de key-gen y key para habilitar la ejecución de ssh sin contraseña.

Ejemplo (esto simplemente descarga un directorio en su terminal):

ssh [email protected] ls
4

puede usar el reenvío de puerto ssh para acceder a la base de datos como si se hubiera instalado localmente. La forma en que se habilita el reenvío de puertos depende del software cliente que utilice, por ejemplo, openssh tiene un interruptor de línea de comandos para él (-L):

ssh [email protected] -L localport:remotehost:remoteport

Este comando haría que elremoteport enremotehost, aunque accesible solo a través dehost, disponible enlocalport en tu ordenador.

Tampoco hay una razón real para usar ese enfoque solo para el desarrollo. Es fácil agregar una opción para que su aplicación Java genere una sesión SSH para canalizar el tráfico. Los reenvíos de puerto ssh son muy sólidos, aunque el rendimiento bajo congestión puede ser dudosoporque tunelizar TCP dentro de TCP confunde los algoritmos de control y tasa de congestión de TCP (http://sites.inka.de/bigred/devel/tcp-tcp.html). Si no quieres generar un proceso, [JSch soporta el reenvío de puertos y la tunelización de IP a través de Java ssh nativo. Craig Ringer
También puede decirle a ssh que escuche el 0.0.0.0:localport en lugar del 127.0.0.1:localport predeterminado pasando el-g Opción (ver página de manual). NO debe hacer esto a menos que realmente lo necesite, pero si lo necesita, está allí. Esto expone "remotehost: remoteport" a través de "<yourhost>: localport" aTODO EL MUNDO quién puede ponerse en contacto con "<yourhost>: yourport", así que asegúrese de que "remotehost: remoteport" tenga una configuración de seguridad sólida y / o use iptables en el host de reenvío para limitar el acceso al puerto. Craig Ringer
2

ciles de lograr lo que necesita.

Sin embargo, si realmente necesita implementar el envío de comandos con Java para su asignación de laboratorio, puede echar un vistazo a la biblioteca JSch (Java Secure Channel) que se encuentra aquí:http://www.jcraft.com/jsch/ Los ejemplos estan aquihttp://www.jcraft.com/jsch/examples/

Con él puede enviar comandos ssh y realizar cualquier tipo de operación a través de una API de Java

Estamos intentando esta solución. Sugerencia: la solución funciona manualmente: ssh [email protected] //> ingrese la contraseña user_lab // psql -h golem -U ingsw12_03 ingsw12_03 // ingsw12_03 => (acceso al servidor postresql ok) // Esta es la solución de Java ":pastebin.com/QrM2UkHD  org.postgresql.util.PSQLException: El servidor solicitó autenticación basada en contraseña, pero no se proporcionó ninguna contraseña. Cambio de cadena rhost = "golem" y urlAlfresco = "jdbc: postgresql: // golem:" + rport + "/ ingsw12_03"; org.postgresql.util.PSQLException: Falló la conexión Causado por: java.net.UnknownHostException: golem ¿Cómo resolver? :( Davide
No te preocupes Los usuarios son falsos e IP es alto con cortafuegos por la Universidad. Davide
De manera práctica, parece que JSch también puede hacer un túnel de IP, por lo que incluso pueden acceder a Pg a través de la sesión de SSH si el acceso directo está desactivado o filtrado. Craig Ringer
... @ DavideAguiari No expondría públicamente su nombre de usuario, host y dirección IP. kmarks2

Preguntas relacionadas