我想用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_data
到stdout
,因为当我询问命令为ssh
时,我在目标主机上看到了remote server
。
答案 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