
問題なく 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 ソケット (エラーに表示されています) 経由で接続しようとします。