Ich versuche, über die pgAdmin3-GUI eine Verbindung zu einer Postgresql-Datenbank auf einem Remote-Server myHost auf Port 5432 herzustellen.
Serverseite:
- Ich habe einen Unix-MyUser, der einer PostgreSQL-Rolle entspricht.
- pg_hba.conf ist:
lokal alle alle vertrauen
Host alle alle 127.0.0.1/32 vertrauen
Clientseite:
- Ich öffne einen SSH-Tunnel: ssh -L 3333:myHost:5432 myUser@myHost
- Ich verbinde mich mit dem Server über pgAdmin3 (oder über psql -h localhost -p 3333).
Ich erhalte folgende Fehlermeldung:
Der Server hat die Verbindung unerwartet geschlossen. Dies bedeutet wahrscheinlich, dass der Server vor oder während der Verarbeitung der Anforderung abnormal beendet wurde.
Ich habe versucht, mit psql -h localhost -p 3333 --dbname=myDB --user=mySuperUser mit der Superuser-Rolle auf eine bestimmte Datenbank zuzugreifen, jedoch ohne Erfolg.
Was habe ich beim Setup vergessen?
Danke
Antwort1
Überprüfen Sie, ob der Remote-Host Tunneling zulässt. Sie können beim Client prüfen, ob der Tunnel abgelehnt wird mit:
ssh -v -L 3333:myHost:5432 myUser@myHost
Antwort2
In meinem Fall bestand das Problem darin, dass der Tunnel mit einer IPv6-Adresse endete:
ssh -L 5434:localhost:5432 user@server
Es genügte, localhost durch die Adresse zu ersetzen, von der ich annahm, dass sie zuvor verwendet wurde:
ssh -L 5434:127.0.0.1:5432 user@server
15 Minuten meines Lebens den Bach runter. :) Hoffe, das spart jemand anderem Zeit …
Antwort3
Falls noch jemand nach einer Lösung sucht:
Versuchen Sie, in /etc/ssh/sshd_config Folgendes einzustellen:
AllowTcpForwarding yes
GatewayPorts yes
Dann:
service sshd restart
Antwort4
Stellen Sie sicher, dass Sie nicht tatsächlich eine Verbindung zu einer lokalen Postgres-Instanz herstellen, die auf demselben Port lauscht, den Sie für das lokale Ende des Tunnels ausgewählt haben.
Wenn der lokale Port verwendet wird, ssh
wird eine Fehlermeldung ausgegeben und die Einrichtung des Tunnels übersprungen. Es wird jedoch weiterhin eine Verbindung zum Remote-Server hergestellt, was dazu führen kann, dass der Fehler vom Bildschirm verschwindet. Da Sie eine Verbindung herstellen können, vermuten Sie nicht, dass etwas mit dem Tunnel nicht stimmt, bis Sie als letzten Ausweg den Remote-Postgres vollständig stoppen und feststellen, dass SieTrotzdemverbinden.
Fragen Sie mich nicht, woher ich das weiß.