ruby net :: ssh不会在channel.on_data上打印stdout数据

时间:2017-02-16 14:22:22

标签: ruby ssh

我想用ruby的{​​{1}}运行一个远程命令,并希望打印输出net::ssh,但我在{{{}下面的代码中看不到任何内容。 1}}

参见测试代码:

stdout

,输出为:

channel.on_data

为什么我不进入区块Net::SSH.start('testhost', "root", :timeout => 10) do |ssh| ssh.open_channel do |channel| channel.exec('ls') do |_, success| unless success puts "NOT SUCCEESS:! " end channel.on_data do |_, data| puts "DATAAAAAA:! " # ======> Why am i not getting to here?? <======= end channel.on_extended_data do |_, _, data| puts "EXTENDED!!!" end channel.on_request("exit-status") do |_, data| puts "EXIT!!!! " end channel.on_close do |ch| puts "channel is closing!" end end end end ?我想抓住channel is closing!

请注意,我知道客户端代码能够on_datastdout,因为当我询问命令为ssh时,我在目标主机上看到了remote server

1 个答案:

答案 0 :(得分:2)

请注意,打开频道是异步的,因此您必须等待频道执行任何有意义的操作,否则您将很快关闭该频道。

试试这个:

Net::SSH.start('test', "root", :timeout => 10) do |ssh|
  ch = ssh.open_channel do |channel|
    channel.exec('ls') do |_, success|
      unless success
        puts "Error"
      end
      channel.on_data do |_, data|
        puts data
      end
      channel.on_extended_data do |_, _, data|
        puts data
      end
      channel.on_request("exit-status") do |_, data|
        puts "Exit"
      end
      channel.on_close do |ch|
        puts "Closing!"
      end
    end
  end

  ch.wait
end