Net::SSH::Multi 使用 session.exec,如何立即获得输出?红宝石

chu*_*tsu 4 ruby net-ssh

所以我一直在尝试使用 Net::SSH::Multi 通过 SSH 登录到多台计算机,然后使用 session.exec("some_command") 在远程计算机上执行 shell 命令。

代码:

#!/usr/bin/ruby
require 'rubygems'
require 'net/ssh'
require 'net/ssh/multi'

Net::SSH::Multi.start do |session|
        # Connect to remote machines
        ### Change this!!###
        session.use 'user@server'

        loop = 1
        while loop == 1
                printf(">> ")
                command = gets.chomp
                if command == "quit" then
                        loop = 0
                else
                        session.exec(command)do |ch, stream, data|
                          puts "[#{ch[:host]} : #{stream}] #{data}"
                        end
                end
        end
end
Run Code Online (Sandbox Code Playgroud)

我目前遇到的问题是,当我在交互式提示中输入命令时,“session.exec”不会返回输出 util 我退出程序,我想知道是否有人遇到过这个问题并可以告诉我我该如何解决这个问题?

chu*_*tsu 5

在session.exec之后添加session.loop可以让程序等待输出。

例如:

session.exec(command)do |ch, stream, data|
  puts "[#{ch[:host]} : #{stream}] #{data}"
end

session.loop
# Or session.wait also does the same job.
Run Code Online (Sandbox Code Playgroud)