SSHトンネルが機能しない理由を見つける

SSHトンネルが機能しない理由を見つける

問題なく SSH できるリモート サーバーがあります。リモート サーバー (「enc」と呼ばれます) とローカル マシンに PostgreSQL (ps) をセットアップし、両方とも 5432 (デフォルト) で実行しています。リモート サーバーは外部からの接続を許可しません (ローカル Web サーバーは直接リモート サーバーに接続します)。

ファイルをコピーしてサーバーにログインし、その側で手動でコマンドを実行するよりも、リモート ps サーバーでコマンドを実行する方が簡単になるように、SSH トンネルを設定しようとしています。

次のコマンドを実行してみました

ssh -N -L 5555:enc:5432 enc

トンネルは正しく設定されているように見えますが、リモートマシンに接続しようとすると

psql -p 5555

動作していないと表示される

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"?

これは、トンネルの設定または制限されたユーザー権限の問題である可能性がありますか (その場合、エラーは異なると思います)?

答え1

これを試して:

ssh -N -L 5555:enc:5432 localhost

その後

lsof -i :5555

そこに何も表示されない場合、ローカル マシンは何もリッスンしていません。

答え2

タイプ

netstat -anp | grep LISTEN | grep "port_number"

サーバー マシンで、サービスが実行されている IP アドレスを探します。

それがマシンの IP アドレスである場合は、 ssh -L コマンドでそのアドレスを指定する必要があります。そうでない場合、それがループバック アドレス (127.0.0.1 - ipv4 または ::1 - ipv6) である場合は、コマンドでそのアドレスを指定します。

答え3

問題はさらに先にあることが判明しました。トンネルは正常に動作しますが、postgres に接続しようとすると、-h を渡す必要があります (localhost の場合であっても)。そうしないと、TCP (トンネルで動作する唯一の方法) ではなく、Unix ソケット (エラーに表示されています) 経由で接続しようとします。

関連情報