使用Ruby通过ssh调用远程命令改进了语法?

时间:2013-12-19 03:03:35

标签: ruby ssh

目前我正在使用反引号方法调用远程脚本,它可以工作,但感觉不对而且很讨厌......

`ssh user@host $(echo "~/bin/command \\\"#{parameter}\\\"")`

有人能给我一个更好的表达方式吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

使用net-ssh。它只是一个包装。

require 'net/ssh'

Net::SSH.start('host', 'user', :password => "password") do |ssh|
  # capture all stderr and stdout output from a remote process
  output = ssh.exec!("~/bin/command '#{parameter}'")
end

puts output

答案 1 :(得分:2)

如果那就是你所追求的,我会让它变得有点漂亮:

#!/usr/bin/env ruby
# encoding: utf-8

home    = "/path/to/users/home/on/remote"
binary  = File.join(home, "bin", "command")
command = "#{binary} '#{parameter}'"
puts `ssh user@host #{command}`

否则,您可以使用net-ssh库,并执行以下操作:

#!/usr/bin/env ruby
# encoding: utf-8

require 'net/ssh'
Net::SSH.start('host', 'user', :password => "<your-password>") do
  home    = "/path/to/users/home/on/remote"
  binary  = File.join(home, "bin", "command")
  command = "#{binary} '#{parameter}'"
  output = ssh.exec!(command)
  puts output
end

显然,有自动捕获远程用户主目录路径的方法,但我跳过了那部分。