Herausfinden, warum ein SSH-Tunnel nicht funktioniert

Herausfinden, warum ein SSH-Tunnel nicht funktioniert

Ich habe einen Remote-Server, auf den ich mich problemlos per SSH einloggen kann. Ich habe PostgreSQL (ps) auf dem Remote-Server (genannt „enc“) und auf dem lokalen Rechner eingerichtet, beide laufen auf 5432 (Standard). Der Remote-Server lässt keine Verbindungen von außen zu (der lokale Webserver geht direkt zu ihm).

Ich versuche, einen SSH-Tunnel einzurichten, um das Ausführen von Befehlen auf dem Remote-PS-Server einfacher zu machen, als Dateien zu kopieren, mich beim Server anzumelden und sie dort manuell auszuführen.

Ich habe versucht, den folgenden Befehl auszuführen

ssh -N -L 5555:enc:5432 enc

Der Tunnel scheint korrekt eingerichtet zu sein, aber wenn ich versuche, eine Verbindung zum Remote-Computer herzustellen mit

psql -p 5555

es heißt, es funktioniert nicht

psql: could not connect to server: No such file or directory. Is the server running locally and accepting connections on Unix domain socket "/run/postgresql/.s.PGSQL.5555"?

Handelt es sich hier wahrscheinlich um ein Problem mit den Tunneleinstellungen oder den restriktiven Benutzerberechtigungen (ich stelle mir vor, dass der Fehler in diesem Fall anders aussehen würde)?

Antwort1

Versuche dies:

ssh -N -L 5555:enc:5432 localhost

und dann

lsof -i :5555

Wenn Sie dort nichts sehen, hört Ihr lokaler Computer nichts ab.

Antwort2

Typ

netstat -anp | grep LISTEN | grep "port_number"

auf Ihrem Servercomputer und suchen Sie nach der IP-Adresse, unter der der Dienst ausgeführt wird.

Wenn es sich um die IP-Adresse des Computers handelt, müssen Sie diese im Befehl „ssh -L“ angeben. Wenn es sich andernfalls um die Loopback-Adresse (127.0.0.1 – IPv4 oder ::1 – IPv6) handelt, geben Sie diese im Befehl an.

Antwort3

Es stellte sich heraus, dass das Problem weiter unten lag. Der Tunnel funktioniert einwandfrei, aber wenn Sie versuchen, eine Verbindung zu Postgres herzustellen, müssen Sie -h übergeben (auch wenn es für localhost ist), da sonst versucht wird, die Verbindung über einen Unix-Socket herzustellen (der direkt im Fehler enthalten ist) und nicht über TCP (was die einzige Möglichkeit ist, wie es mit einem Tunnel funktioniert).

verwandte Informationen