Net :: Ssh :: Multi باستخدام Session.exec ، كيف يمكنك الحصول على الإخراج على الفور؟ روبي

StackOverflow https://stackoverflow.com/questions/1383282

  •  21-09-2019
  •  | 
  •  

سؤال

لذلك كنت أحاول استخدام Net :: Ssh :: Multi لتسجيل الدخول إلى آلات متعددة باستخدام VIA SSH ، ثم تنفيذ أوامر shell على الآلات البعيدة مع 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.loop بعد الجلسة. يسمح Exec للبرنامج بانتظار الإخراج.

مثل:

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

session.loop
# Or session.wait also does the same job.

نصائح أخرى

إلقاء نظرة هنا. ال exec يبدو أن الطريقة تسفر عن نتيجة للكتلة المقدمة.

مثال من الوثائق:

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

إخلاء المسئولية: لم أختبر هذا بنفسي. قد يعمل أم لا. اسمحوا لنا أن نعرف عندما يعمل!

قم بإزالة حلقة و Call Session.loop بعد المكالمة إلى Exec. شيء من هذا القبيل:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top