セキュリティ的には、問題があるが、
サクッと リモートマシンのファイル内容を取得するのに druby を使えます。
server.rb, client.rb の2つのファイルから構成します。
server.rb
# coding: utf-8
# See http://docs.ruby-lang.org/ja/2.0.0/library/drb.html
require 'drb/drb'
require "open3"
# 通信を待ち受ける URI
URI="druby://localhost:8787"
class RunCommandServer
def read(file_path)
File.new(file_path).read
end
def command(command)
Open3.capture3(command)
end
end
# サーバ側でリクエストを受け付けるオブジェクト
FRONT_OBJECT = RunCommandServer.new
# サーバを起動する
# DRb.start_service(URI, FRONT_OBJECT, :safe_level => 1)
DRb.start_service(URI, FRONT_OBJECT, :safe_level => 0)
# DRb のスレッドが終了するのを待つ
DRb.thread.join
client.rb
# coding: utf-8
# See http://docs.ruby-lang.org/ja/2.0.0/library/drb.html
require 'pp'
require 'drb/drb'
# 接続先の URI
SERVER_URI="druby://localhost:8787"
# DRbサーバを起動する
# この例には必要ないが、front オブジェクト以外の
# リモートオブジェクトのメソッドを呼び出す時には必要
DRb.start_service
# リモートオブジェクトの取得
rpc = DRbObject.new_with_uri(SERVER_URI)
# リモートメソッドの呼び出し
pp rpc.command('cat server.rb')
pp rpc.read('server.rb')
コードは 同一マシン(localhost) 用になっているけど、サーバー指定を書き換えればよいはず。
localhost 上では次のようにして動作確認できる。
2 つ端末を開く。
1 つ目の端末で "ruby server.rb"
2 つ目の端末で "ruby clinet.rb"
==> 2 つ目の端末に server.rb の内容が表示される。