net-sshの練習
RubyでSSH経由でリモートのLinuxマシンを操作するとかいうので、net-sshを練習している。
いかんせんドキュメントが英語なもんで進みが悪い。
http://net-ssh.rubyforge.org/
require "rubygems" require "net/ssh" host = "example.com" port = 22 user = "user_name" pass = "user_pass" Net::SSH.start(host, port, user, pass) do |session| shell = session.shell.sync # コマンドを実行 shell.send_command("cd /usr/local/src") #shell.cd "/usr/local/src" # 上に同じ(method_missingを使ってる) # コマンドの標準出力を得る out = shell.send_command("pwd") #out = shell.pwd # 上に同じ puts out.stdout # コマンドの標準エラー出力を得る # 存在しないディレクトリに移動 -> エラーになる out = shell.cd "/abc" # statusが0でない場合、stderrに標準エラー出力が入る puts out.stderr unless out.status.zero? # mysqlクライアント 以下、結果は全部同じ # case1 out = shell.send_command(%Q/echo "select count(*) from table_name" | mysql -u db_user --password=db_pass db_name/) puts out.stdout # case2 shell.send_command(%Q/echo "select count(*) from table_name;" > select.sql/) out = shell.send_command("mysql -u db_user --password=db_pass db_name < select.sql") puts out.stdout # case3 out = shell.send_command("mysql -u db_user --password=db_pass db_name", <<-CMD) select count(*) from table_name; exit CMD puts out.stdout end