4

そのため、Net::SSH::Multi を使用して SSH 経由で複数のマシンにログインし、リモート マシンで session.exec("some_command") を使用してシェル コマンドを実行しようとしました。

コード:

#!/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

私が現在抱えている問題は、対話型プロンプトでコマンドを入力すると、「session.exec」が出力ユーティリティを返さないことです。プログラムを終了しました。この問題に遭遇した人がいるかどうか疑問に思っていました。この問題を解決するにはどうすればよいですか?

4

3 に答える 3

4

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.
于 2009-09-08T20:13:18.013 に答える
0

while ループを削除し、exec の呼び出しの後に session.loop を呼び出します。このようなもの:

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

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

  # Tell Net::SSH to wait for output from the SSH server
  session.loop  
end
于 2009-09-07T15:18:03.503 に答える