echoeida
echoeida

Reputation: 342

How to SSH tunnel and connect to a database using IntelliJ and JDBC?

I'm having issues connecting to a database hosted on a server using IntelliJ and JDBC. With the command line, the command:

ssh username@server -L 11100:ct1:28017 -N

creates a tunnel successfully and the command:

psql db_name -h localhost -p 11100 db_username

connects to the database fine and allows me to use it. How would this be translated correctly into the IntelliJ Data Sources and the SSH tunnel tools?

At the moment, for the SSH tunnel settings I have:

Proxy Host: server

Port: 22

Proxy user: username

For the general tab I have:

host: localhost

port: 28017

database: db_name

user: db_username

The connection returns successfully after testing the connection. Inside my program I have:

Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:28017/db_name", user, password);

The URL parameter is the one generated by IntelliJ. This however gives me an error "Connection to localhost:28017 refused."

Any ideas on what I am doing wrong?

Upvotes: 17

Views: 31012

Answers (3)

Roger Dahl
Roger Dahl

Reputation: 15734

If the error is Exhausted available authentication methods ❶, make sure that the passphrase ❷ is provided if required. This is easy to forget because the passphrase is often supplied automatically by the OS keyring manager, which makes it seem like the key does not have one.

The credentials in ❸ are for Postgres. These will not work with peer authentication. In my case, I needed this in pg_hba.conf:

hostnossl  all  rdahl  127.0.0.1/32  md5

The proxy host and user in ❹ are for the ssh server as seen from the client.

The docs from JetBrains are odd and left me in doubt if this is just using an existing SSH tunnel, or if it creates one. It creates one.

The Test Connection buttons in the two dialogs both trigger the same test.

SSH credentials dialog Data sources general Data sources SSH

Upvotes: 1

gmode
gmode

Reputation: 3740

Here's my setup via intellij if anyone is looking for simple solution without external libraries.

  1. Open Database view (View -> Tool Windows -> Database).
  2. Add new DataSource (right-click, New -> Data Source -> Postgres/Mysql). In host, use 127.0.0.1 (not localhost, sometimes localhost is not properly resolved).
  3. Fill in rest of the fields as configured on your remote host.

enter image description here

Now click on SSH/SSL tab and configure ssl tunnel:

enter image description here

Upvotes: 12

Xvolks
Xvolks

Reputation: 2155

Do you connect to SSH server from a java client like SSHJ (https://github.com/hierynomus/sshj) ?

The URL on your DriverManager seems wrong: try port 11100 instead.

Upvotes: 1

Related Questions