Net :: Ssh :: Multi باستخدام Session.exec ، كيف يمكنك الحصول على الإخراج على الفور؟ روبي
سؤال
لذلك كنت أحاول استخدام 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
لا تنتمي إلى StackOverflow