
我有一個遠端伺服器,可以透過 SSH 訪問,沒有任何問題。我在遠端伺服器(稱為“enc”)和本機上設定了 PostgreSQL (ps),兩者都在 5432(預設)上運行。遠端伺服器不允許來自外部的連接(本地 Web 伺服器直接存取它)。
我正在嘗試設定一個 SSH 隧道,以使在遠端 ps 伺服器上運行命令比複製檔案、登入伺服器並在該端手動運行它們更容易。
我嘗試運行以下命令
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),否則它將嘗試通過 unix 套接字(錯誤中就在那裡)而不是通過 tcp 連接(這這是它與隧道一起使用的唯一方法)。