Java + SSH + Postgres

Estamos implementando un proyecto universitario: un servicio de car-pooling en Java.

Necesitamos resolver un problema relacionado con "cómo administrar un servidor postgres": la base de datos 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 (nuestras) a través de las cuales podemos establecer una conexión ssh a un host.

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

Gracias :) Davide

preguntado el 12 de junio de 12 a las 19:06

Mira esto. No es la respuesta completa, pero creo que es parte de ella, al menos la conexión SSH: código-ejemplo.com/java/ssh_exec.asp -

¿Qué has intentado?....en serio...estoy atado de leer preguntas abiertas... -

@Brendan: Lo siento, pero aún no hemos probado nada porque no somos expertos en Java. Así que estábamos buscando sugerencias de sus expertos :) Tal vez un patrón de diseño verificado en lugar de malas soluciones encontradas en otros lugares. -

3 Respuestas

Si esto es solo para desarrollo, puede usar el reenvío de puertos ssh para acceder a la base de datos como si estuviera instalada localmente. La forma en que se habilita el reenvío de puertos depende del software cliente que use, por ejemplo, openssh tiene un interruptor de línea de comandos para ello (-L):

ssh user@host -L localport:remotehost:remoteport

Este comando haría que el remoteport on remotehost, aunque solo se puede acceder a través de host, disponible en localport en tu ordenador.

Respondido el 12 de junio de 12 a las 19:06

También puede decirle a ssh que escuche en 0.0.0.0:localport en lugar del predeterminado 127.0.0.1:localport pasando el -g opción (ver página man). NO debe hacer esto a menos que realmente lo necesite, pero si lo necesita, está ahí. Esto expone "remotehost:remoteport" a través de " :puertolocal" a TODO EL MUNDO quien puede contactar" :yourport", así que asegúrese de que "remotehost:remoteport" tenga una sólida configuración de seguridad y/o use iptables en el host de reenvío para limitar el acceso al puerto. - craig timbre

Tampoco hay una razón real para usar ese enfoque solo para el desarrollo. Agregar una opción para que su aplicación Java genere una sesión SSH para canalizar el tráfico es fácil. Los reenvíos de puertos ssh son muy sólidos, aunque el rendimiento bajo congestión puede ser dudoso porque la tunelización de TCP dentro de TCP confunde los algoritmos de velocidad y control de congestión de TCP (http://sites.inka.de/bigred/devel/tcp-tcp.html). Si no desea generar un proceso, [JSch admite el reenvío de puertos y la tunelización de IP a través de Java ssh nativo. - craig timbre

Eche un vistazo a las otras respuestas sugeridas, ya que parecen más fáciles de lograr lo que necesita.

Sin embargo, si realmente necesita implementar el envío de comandos con Java para su tarea de laboratorio, puede echar un vistazo a la biblioteca JSch (Java Secure Channel) que se encuentra aquí: http://www.jcraft.com/jsch/ Los ejemplos están aquí http://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.

Respondido el 12 de junio de 12 a las 19:06

Convenientemente, parece que JSch también puede tunelizar IP, por lo que incluso pueden acceder a Pg a través de la sesión SSH si el acceso directo está bloqueado o filtrado. - craig timbre

Estamos probando esta solución. Sugerencia: la solución funciona manualmente: ssh user_lab@lucia.cs.unibo.it // >ingrese la contraseña user_lab // psql -h golem -U ingsw12_03 ingsw12_03 // ingsw12_03=> (Acceda al servidor postresql ok) // Esta es la solución 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: conexión fallida Causado por: java.net.UnknownHostException: golem ¿Cómo resolverlo? :( - Gorgo

...@DavideAguiari No expondría públicamente su nombre de usuario, host y dirección IP. - kmarks2

No te preocupes. Los usuarios son falsos y la IP tiene un alto firewall de la Universidad. - Gorgo

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

Considere la posibilidad de generar claves e intercambiar claves para permitir la ejecución de ssh sin contraseña.

Ejemplo (esto simplemente descarga una lista de directorios en su terminal):

ssh me@mybox ls

Respondido el 12 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.