# postgres via ssh Tunnel?



## Mifro (10. Nov 2011)

Hallo,

ich muss auf eine Postgres - Datenbank via jdbc über einen ssh Tunnel zugreifen.
Hat das schon mal jemand gemacht?

Vielleicht hat jemand einen Tip, oder kennt einen Link, wo das Verfahren beschrieben ist 

vielen Dank schonmal. :applaus:


----------



## faetzminator (10. Nov 2011)

Was ist dir unklar? Der Tunnel muss einfach auf den Zielhost und -port zeigen. JDBC muss dann auf den Host und Port zeigen, von welchem aus die Connection aufgebaut wurde (ausser es ist natürlich ein Reverse Tunnel).


----------



## Mifro (10. Nov 2011)

faetzminator hat gesagt.:


> Was ist dir unklar? Der Tunnel muss einfach auf den Zielhost und -port zeigen. JDBC muss dann auf den Host und Port zeigen, von welchem aus die Connection aufgebaut wurde (ausser es ist natürlich ein Reverse Tunnel).



Mit ist nicht ganz klar, wie ich den Tunnel bei der Anmeldung kenntlich machen kann.

```
String url = "jdbc:postgresql://serverxx.de/Datenbank";
```
wäre der normale Connection String (evtl. noch mit Port).
Wenn ich über einen Tunnel gehe, kann ich aber nur über localhost auf die DB zugreifen.


----------



## faetzminator (10. Nov 2011)

Von welchem Host zu welchem machst du ein Tunnel? Von localhost zu irgendwas.de? Dann musst du natürlich statt [c]postgresql://serverxx.de[/c] einfach auf [c]postgresql://localhost[/c] verbinden.


----------



## Mifro (10. Nov 2011)

faetzminator hat gesagt.:


> Von welchem Host zu welchem machst du ein Tunnel? Von localhost zu irgendwas.de? Dann musst du natürlich statt [c]postgresql://serverxx.de[/c] einfach auf [c]postgresql://localhost[/c] verbinden.



Ich habe einen Fat-Client auf irgendeiner Maschine. Die DB läuft auf einem externen Server.
Sagen wir mal Client 192.168.xxx und DB auf 81.xxx...
Da die DB nicht von außen zu erreichen sein darf. Kann ich von dem Client nur über einen Tunnel auf den 81iger Host zugreifen, dann mit localhost auf den Port der postgres DB verbinden.
Ich brauche also einmal den den Tunnelzugang in der Klasse, und dann den Zugang zur DB.

VPN geht nicht, da alle Clients über nicht bekannte IPs laufen, und das zu Konflikten führen kann.

Das müßte eigentlich alles über eine Klasse geregelt werden können. Nur hab ich darüber bisher nichts griffiges gefunden


----------



## faetzminator (10. Nov 2011)

Du willst SSH in deinem Programm verwenden? Also nicht einfach einen SSH-Tunnel verwenden?


----------



## Mifro (10. Nov 2011)

faetzminator hat gesagt.:


> Du willst SSH in deinem Programm verwenden? Also nicht einfach einen SSH-Tunnel verwenden?



ssh wird nicht funktionieren, denke ich.


----------



## HoaX (11. Nov 2011)

Ohne SSH gibts auch keinen SSH-Tunnel. Oder was meinst du wo das "SSH" in "SSH-Tunnel" her kommt?!

Was hat VPN an unbekannten IPs auszusetzen? Solange der Server bekannt ist, ist es Wurst was für IPs die Clients haben, die bekommen innerhalb des VPNs einfach eine neue zugewiesen und fertig. OpenVPN kann das z.B.


----------



## faetzminator (11. Nov 2011)

Mifro hat gesagt.:


> ssh wird nicht funktionieren, denke ich.



:bahnhof:? Langsam musst du uns echt erzählen, was du nun machen willst


----------



## Mifro (11. Nov 2011)

```
// SSH Tunnel
Session session = null;
try {
  final JSch jsch = new JSch();
  session = jsch.getSession(ssh_user, ssh_server, 22);

  final Hashtable config = new Hashtable();
  config.put("StrictHostKeyChecking", "no");
  session.setConfig(config);
  jsch.addIdentity("ssh/id_dsa");

  session.connect();

  int assigned_port = session.setPortForwardingL(lport, rhost, rport);

} catch (Exception e) {
  e.printStackTrace();
  System.exit(-1);
}    

// DB connection
Connection con = null;
try {
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection("jdbc:mysql://localhost:3366/db_name", "db_user", "db_pass");

  // access  database

} catch (Exception ex) {
  ex.printStackTrace();
  System.exit(-1);
} finally {
  try {
    if (con != null) con.close();
  } catch (Exception ex) {/* NOP */}
}

session.disconnect();
```


----------



## maki (11. Nov 2011)

Solltest du dringend lesen:
http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html


----------



## Mifro (11. Nov 2011)

Die Frage war ganz klar formuliert! 
Trotzdem danke.


----------



## maki (11. Nov 2011)

Mifro hat gesagt.:


> Die Frage war ganz klar formuliert!


Nein war sie nicht, das haben dir jetzt schon mehrere Leute gesagt.
Anstatt die Frage zu beantworten postest du kommentarlos seltsamen Code.... sorry, aber das ist keine Kommunikation.

Kann man den Thread schliessen oder kommt noch was von dir?


----------

