ruby在远程计算机上运行命令

时间:2013-12-25 21:35:05

标签: ruby net-ssh

我正在尝试使用ruby的net ssh远程运行命令。我需要输出以及退出代码。此主题还有其他stackoverflow线程,但接受的解决方案不起作用。有人建议使用net-ssh-shell gem,但是当我尝试它时,我收到一个错误,说这个包与我的net-ssh包的版本有冲突... 这就是我所拥有的:

  Net::SSH.start(remote_ip, username,:keys => [ssh_key_path], :verbose => :debug) do |ssh|
    cmd = "blah bla"
    result = ssh.exec!(cmd)
    puts result
  end

它可以工作,但如果失败则不会引发异常。我也尝试使用通道来检索退出代码,但它总是返回0:

channel.on_request("exit-status") do |ch,data|
  exit_code = data.read_long
end

请帮帮我。我已经根据互联网上的错误信息尝试了几件事。

1 个答案:

答案 0 :(得分:3)

如果您使用的是Ruby 1.9+,我建议使用Open3.popen3

i, o, e, t = Open3.popen3("ssh ... remote_user@remote_host remote_command")
i.write ... # if your command needs input
output = o.read
error = e.read
status = t.value.exitstatus