gpt4 book ai didi

ruby - 使用 Ruby/Net::SSH 进行远程数据库连接的本地到远程端口转发

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:47 24 4
gpt4 key购买 nike

我正在从我的 Windows 盒子使用本地到远程端口转发访问远程数据库。它使用腻子进行端口转发就像一个魅力,但当我尝试使用 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' .您的数据库服务器可能只绑定(bind)到 127.0.0.1(本地主机),但您的 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 连接到的主机(即远程主机)进行解释的。

关于ruby - 使用 Ruby/Net::SSH 进行远程数据库连接的本地到远程端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com