it-swarm.com.de

PostgreSQL über SSH Tunnel

Ich möchte RazorSQL verwenden, um eine Verbindung zu meiner Datenbank herzustellen, die auf einem Remote-Server ausgeführt wird. Ich erstelle einen SSH-Tunnel auf meinem localhost mit dem folgenden Befehl:

ssh -L 1111:remote.server.com:5432 [email protected]

Ich konfiguriere meine Verbindung über die RazorSQL-Benutzeroberfläche und gebe localhost als Host und 1111 Als Port an. Wenn ich auf "Verbinden" klicke, erscheint folgende Fehlermeldung:

ERROR: An error occurred while trying to make a connection to
the database: 

JDBC URL: jdbc:postgresql://localhost:1111/myuser

FATAL:
no pg_hba.conf entry for Host "aaa.bbb.ccc.ddd",
user "myuser", database "mydatabase", SSL off

dabei ist aaa.bbb.ccc.ddd die IP-Adresse eines Remote-Servers.

Außerdem darf ich den Inhalt meiner pg_hba.conf - Datei nicht ändern. So sieht es im Moment aus:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

@[email protected]# "local" is for Unix domain socket connections only
@[email protected]   all         all                               @[email protected]
# IPv4 local connections:
Host    all         all         127.0.0.1/32          @[email protected]
# IPv6 local connections:
Host    all         all         ::1/128               @[email protected]

Kann ich mit meinem aktuellen Setup eine Verbindung zum Datenbankserver über einen SSH-Tunnel herstellen, ohne die Serverkonfiguration zu ändern?

44
kozooh

Ihre pg_hba.conf scheint Verbindungen von localhost zuzulassen. Der einfachste Weg, um zu bewirken, dass Ihre SSH-Tunnelverbindungen von localhost angezeigt werden, besteht darin, sie zu localhost zu machen.

Der folgende SSH-Befehl stellt eine Verbindung zu remote.example.com als Benutzer "user" her und veranlasst Ihren ssh-Client, localhost, Port 1111/tcp, abzuhören. Alle Verbindungen zu diesem Port werden über den SSH-Tunnel weitergeleitet, und auf der SSH-Serverseite werden die Verbindungen zu localhost, Port 5432/tcp, hergestellt. Da wir eine Verbindung zu localhost herstellen, scheinen die Verbindungen ebenfalls von localhost zu stammen und sollten mit Ihrer vorhandenen pg_hba.conf-Zeile übereinstimmen.

ssh -L 1111:localhost:5432 [email protected]

Wenn dies ein Tunnel mit langer Laufzeit sein soll, würde ich die Verwendung von autossh empfehlen

Verwenden Sie zum Herstellen einer Verbindung mit dem psql-Client auf dem Host, auf dem Sie den ssh-Client ausführen, Folgendes:

psql -h localhost -p 1111 -U your-db-username database-name

Sie sollten dann aufgefordert werden, das Kennwort Ihres Datenbankbenutzers einzugeben.

Alternativ können Sie einer Datei mit dem Namen .pgpass In Ihrem Ausgangsverzeichnis auf dem Client, auf dem Sie psql ausführen, die folgende Zeile hinzufügen:

localhost:1111:database-name:your-db-user:your-db-password
74
jeff