没有得到SSH命令的输出/结果

时间:2017-01-18 12:04:23

标签: ruby ssh shoes

我正在连接服务器,想要运行命令并打印输出。这是代码:

def log_in
  Net::SSH.start('hostname', 'username', :password => "password") do |ssh|
    ssh.open_channel do |channel|
      output = channel.exec "ls" do |ch, success, data|
        if success then
          alert "Result: #{output} #{success} #{data}"
        end
      end
    end
  end
end

结果是“输出”为空列表[],“成功”为真,“数据”为空。显然,情况并非如此,因为当我通过终端登录并点击“ls”命令时,列出了几个文件/文件夹。哪里是我的错?

有趣的是,如果我发送乱码作为命令,例如而不是“ls”,我发送“asdfgh”,它返回相同的([],true,空)。 使用Shoes / Ruby。

2 个答案:

答案 0 :(得分:1)

看看docs。作为exec方法的第二个参数传递的块只需要两个参数chsuccess。您需要确保添加一个在数据可用时触发的回调。例如:

channel.on_data do |ch, data|
  puts "got stdout: #{data}"
end

您也可以使用ssh.exec方法。

答案 1 :(得分:1)

这有效:

Net::SSH.start('hostname', username, :password => password) do |ssh|
  ssh.open_channel do |channel|
    output = channel.exec "ls" do |ch, success, data|
      if success then
        channel.on_data do |ch, data|
            alert "#{data}"
        end
      end
    end
  end
  ssh.loop
end

问题是,登录时存在欢迎消息(并且它的第一行是空白的)。 " ssh.loop"允许通过欢迎信息的所有行,最后,通过" ls"命令。