1

ssh 経由でリモート サーバーへのトンネルを確立し、転送されたポートを使用して MySQL にアクセスしようとしています。

現在はこんな感じで使っています

$gateway = Net::SSH::Gateway.new('target.server', 'user')

def with_gateway
  $gateway.open("target.server", 3306) do |port|
    yield port
  end
end

私の考えでは、これに似ているものはどれですか...

`ssh -L #{port}:localhost:3306 -N user@target.server`

それから私がそれを使用しようとすると、このようなことをします。

with_gateway do |port|
  puts `mysql -u user -ppass -h 127.0.0.1 -P #{port} -e SHOW\ DATABASES\;`
end

このエラーメッセージが表示されます..

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

私は何が欠けていますか?

4

1 に答える 1

2

$gateway.open("target.server", 3306) do |port|

この場合、より同等です。

ssh -L #{port}:target.server:3306 -N user@target.server

これは、mysql サーバーが 127.0.0.1 (または内部 IP アドレス、または内部ネットワーク経由の接続のみを許可するようにファイアウォールで保護されたもので、すべて合理的で正常な構成) のみをリッスンする場合に失敗する可能性があります。

おそらくあなたが望む:

$gateway.open("127.0.0.1", 3306) do |port|

この場合は代わりに。

于 2013-02-14T17:17:15.573 に答える