Frage an postgresql, ssh, java – Java + SSH + Postgres

2

Wir führen ein Universitätsprojekt durch: einen Fahrgemeinschaftsdienst in Java.

Wir müssen ein Problem lösen, das mit der Verwaltung eines Postgres-Servers zusammenhängt: Die PostgreSQL-Datenbank wird in einem Laborserver namens "golem" (130.136.4.sth) konfiguriert, der nur über Terminals im selben Subnetz (130.136.4.0) erreichbar ist. Wir haben vier Accounts (unseren), über die wir eine SSH-Verbindung zu einem Host herstellen können.

Ist es möglich, SQL-Abfragen über SSH in Richtung Postgres DB in JAVA durchzuführen?

Vielen Dank :) Davide

@Brendan: Entschuldigung, aber wir haben noch nichts ausprobiert, weil wir keine Java-Experten sind. Also suchten wir nach Hinweisen von euch Experten :) Vielleicht wurde ein verifiziertes Designmuster anstelle von schlechten Lösungen gefunden. Davide
Was haben Sie versucht? ... im Ernst ... Ich bin daran gebunden, offene Fragen zu lesen ... Brendan
Schau dir das an. Es ist nicht die vollständige Antwort, aber ich denke, es ist ein Teil davon, zumindest die SSH-Verbindung:example-code.com/java/ssh_exec.asp Valentin Vrinceanu

Deine Antwort

3   die antwort
1

ssh" gefolgt von einem Befehl ausführen, wird dieser Befehl auf dem Remote-Host ausgeführt. Sie sollten also in der Lage sein, vorgebackene Abfragen im Batch-Modus über ssh auszuführen.

Erwägen Sie den Austausch von Schlüsseln und Schlüsseln, um die passwortlose ssh-Ausführung zu ermöglichen.

Beispiel (dabei wird nur eine Verzeichnisliste auf Ihrem Terminal abgelegt):

ssh [email protected] ls
2

Schauen Sie sich die anderen vorgeschlagenen Antworten an, da sie einfacher zu erreichen sind, was Sie brauchen.

Wenn Sie jedoch die Befehlsübermittlung für Ihre Laboraufgabe wirklich mit Java implementieren müssen, können Sie sich die JSch-Bibliothek (Java Secure Channel) ansehen, die Sie hier finden:http://www.jcraft.com/jsch/ Beispiele sind hierhttp://www.jcraft.com/jsch/examples/

Damit können Sie ssh-Befehle senden und über eine Java-API jede Art von Operation ausführen

Mach dir keine Sorgen. Benutzer sind gefälscht und IP wird von der Universität stark geschützt. Davide
Auf den ersten Blick sieht es so aus, als ob JSch auch IP tunneln kann, sodass sie sogar über die SSH-Sitzung auf PG zugreifen können, wenn der direkte Zugriff durch eine Firewall geschützt oder gefiltert ist. Craig Ringer
... @ DavideAguiari Ich würde Ihren Benutzernamen, Ihren Host und Ihre IP-Adresse nicht öffentlich zugänglich machen. kmarks2
Wir versuchen diese Lösung. Hinweis: Manuelle Lösung funktioniert: ssh [email protected] //> Passwort eingeben user_lab // psql -h golem -U ingsw12_03 ingsw12_03 // ingsw12_03 => (Zugriff auf PostResql-Server ok) // Dies ist eine Java-Lösung ":pastebin.com/QrM2UkHD  org.postgresql.util.PSQLException: Der Server hat eine kennwortbasierte Authentifizierung angefordert, es wurde jedoch kein Kennwort angegeben. Ändern des Strings rhost = "golem" und urlAlfresco = "jdbc: postgresql: // golem:" + rport + "/ ingsw12_03"; org.postgresql.util.PSQLException: Verbindung fehlgeschlagen. Ursache: java.net.UnknownHostException: golem. :( Davide
4

Wenn dies nur für die Entwicklung gedacht ist, können Sie die SSH-Portweiterleitung verwenden, um auf die Datenbank zuzugreifen, als ob sie lokal installiert wäre. Wie die Portweiterleitung aktiviert ist, hängt von der verwendeten Client-Software ab. Openssh verfügt beispielsweise über einen Befehlszeilenschalter (-L):

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

Dieser Befehl würde das machenremoteport aufremotehost, obwohl nur zugänglich durchhost, verfügbar auflocalport auf deinem Computer.

Sie können ssh auch anweisen, 0.0.0.0:localport anstelle des Standard-127.0.0.1:localport abzuhören, indem Sie den Befehl übergeben-g Option (siehe Manpage). Sie sollten dies NICHT tun, es sei denn, Sie brauchen es wirklich, aber wenn Sie es brauchen, ist es da. Dies macht "remotehost: remoteport" über "<yourhost>: localport" zu "JEDER Wer kann sich mit "<IhrHost>: IhrPort" in Verbindung setzen? Vergewissern Sie sich, dass für "Remotehost: Remoteport" eine hohe Sicherheit eingerichtet ist, und / oder verwenden Sie iptables auf dem Weiterleitungshost, um den Zugriff auf den Port zu beschränken. Craig Ringer
Es gibt auch keinen wirklichen Grund, diesen Ansatz nur für die Entwicklung zu verwenden. Das Hinzufügen einer Option für Ihre Java-App, mit der eine SSH-Sitzung zum Tunneln des Datenverkehrs erstellt werden kann, ist ganz einfach. SSH-Port-Forwards sind sehr solide, obwohl die Leistung unter Engpässen schwierig sein kannda das Tunneln von TCP innerhalb von TCP die Überlastungskontroll- und Ratenalgorithmen von TCP durcheinander bringt (http://sites.inka.de/bigred/devel/tcp-tcp.html). Wenn Sie keinen Prozess erzeugen möchten, [JSch Unterstützt Port-Forwarding und IP-Tunneling über natives Java-SSH. Craig Ringer

Verwandte Fragen