3

「 Ruby で ssh トンネルを作成し、リモート ホストの mysql サーバーに接続する方法」に似た状況があります。

ローカル マシンから、実稼働の MySQL データベース ホストに対してクエリを実行したいと考えています。ローカル マシンがデータベース ホストに直接接続できません。ただし、ゲートウェイ マシンに SSH 接続すると、MySQL クライアントを実行してデータベース ホストに接続できます。

私のマシンからプログラムでクエリを実行し、それをゲートウェイ マシンに転送してデータベース サーバーに転送し、結果を返す方法を見つけようとしています。LOCAL => GATEWAY => DB_HOST基本的には転送したいです。

以下に示すように、コマンドラインでMySQLを実行するハックなソリューションがssh.execありますが、ポート転送を2回行う方法を見つけようとしています。やってみましたが、今のところ成功していません。

require 'rubygems'  
require 'mysql2'  
require 'net/ssh/gateway' 

gateway = Net::SSH::Gateway.new(
  $gateway_host, $gateway_user,:password => $gateway_pass)

# This works
ssh = gateway.ssh($db_host, $db_login_user)
data = ssh.exec!("mysql -u#{$db_user} -p#{$db_pass} #{$db_name} -e '#{$sql_query}'")
puts "#{data.class} is the class type"
puts data

# Want to do something like this with port forwarding
# client = Mysql2::Client.new(:host => $db_host,
#                            :username => $db_user,
#                            :password => $db_pass,
#                            :database => $db_name,
#                            :port => port)
# results = client.query($sql_query)

puts "end stuff"
ssh.close

助言がありますか?

4

1 に答える 1

0

あなたの図はそれをかなりうまくレイアウトしています。ゲートウェイから Db_Host へのトンネルが必要です。ローカル マシンからゲートウェイへの 2 つ目のトンネル。2 つのトンネルは、ゲートウェイ経由でローカル マシンを db_host に効果的に接続します。

これは、SSH を介した MySQL のトンネリングに固有のリファレンスです。

于 2013-08-21T14:34:56.027 に答える