簡體   English   中英

使用Ruby / Net :: SSH進行遠程數據庫連接的本地到遠程端口轉發

[英]Local-to-remote port forwarding using Ruby/Net::SSH for remote db connection

我正在使用從我的Windows框轉發的本地到遠程端口訪問遠程數據庫。 它就像一個使用putty進行端口轉發的魅力,但是當我嘗試使用Ruby / Net :: SSH轉發時它失敗了。 這是我的代碼片段:

require 'rubygems'
require 'net/ssh'

Net::SSH.start(remote_host, user_name, :password => password) do |ssh|
  ssh.logger.sev_threshold=Logger::Severity::DEBUG
  ssh.forward.local(5555, 'www.google.com', 80) # works perfectly
  ssh.forward.local(4444, remote_host, 1234)    # db connection hangs up
  ssh.loop { true }
end

使用瀏覽器進行測試后,google.com的前端工作正常。 轉發到我的linux服務器的端口,我的數據庫服務器正在端口1234上偵聽,但是無效。 當我嘗試連接到localhasot時:4444連接掛起。 日志:

DEBUG -- net.ssh.service.forward[24be0d4]: received connection on 127.0.0.1:4444
DEBUG -- tcpsocket[253ba08]: queueing packet nr 6 type 90 len 76
DEBUG -- tcpsocket[24bde64]: read 8 bytes
DEBUG -- tcpsocket[253ba08]: sent 100 bytes
DEBUG -- net.ssh.connection.channel[24bdcc0]: read 8 bytes from client, sending over local forwarded connection

然后什么都沒有!

我正在使用net-ssh 2.0.22 / ruby​​ 1.8.7

將第二個remote_host更改為'localhost' 您的數據庫服務器可能只綁定到127.0.0.1(localhost),但您的SSH轉發是將數據包發送到您的外部IP地址(通過解析remote_host獲得)。

ssh到linux框並運行sudo netstat -n --tcp --listen -p 例如,我看到了這個:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
...
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1552/postgres

這意味着postgres只收聽127.0.0.1( Local Address值)。 如果我運行命令psql -h 127.0.0.1 ,我可以連接到我的數據庫。 但是,如果我運行命令psql -h <hostname>psql -h <my external IP> ,則拒絕連接。

此外,如果我有ssh.forward.local(4444, remote_host, 5432) ,我無法通過端口轉發連接到我的數據庫。 但如果我有ssh.forward.local(4444, 'localhost', 5432) ,我能夠連接。

嘗試這個:

Net::SSH.start(remote_host, user_name, :password => password) do |ssh|
  ssh.forward.local(4444, 'localhost', 1234)
  ssh.loop { true }
end

請注意,在這種情況下,“localhost”是相對於您通過ssh連接的主機(即遠程主機)進行解釋的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM