روبي - مشاكل مع توقعه، وشركة خاصة
سؤال
وأنا أحاول كتابة السيناريو روبي من شأنها أن SSH لأكثر من الخادم، قم بتشغيل أمر معين، وجلب الإخراج من ذلك. وهنا ما عندي حتى الآن، معظمهم مقتبسة من البرمجة روبي كتاب :
require 'pty'
require 'expect'
$expect_verbose = true
PTY.spawn("ssh root@x.y") do |reader, writer, pid|
reader.expect(/root@x.y's password:.*/)
writer.puts("password")
reader.expect(/.*/)
writer.puts("ls -l")
reader.expect(/.*/)
answer = reader.gets
puts "Answer = #{answer}"
end
للأسف كل ما اتلقى العودة هو هذا:
Answer = .y's password:
وأي فكرة ما فعلته خطأ، وكيفية تخفيف هذا؟
المحلول
لهذا أوصي باستخدام الأحجار الكريمة صافي سه: sudo gem install net-ssh
: HTTP : //net-ssh.rubyforge.org/ssh/v2/api/index.html
والرمز يذهب قليلا مثل هذا:
require 'rubygems'
require 'net/ssh'
Net::SSH.start('your-server', 'username', :password => "password") do |ssh|
puts ssh.exec!("ls -la")
end
نصائح أخرى
http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - لديه بعض الأمثلة لطيفة من استخدام PTY مع وبدون روبي تتوقع.
وأنا غالبا ما تجد أنه من الأسهل استخدام PTY فقط، كما يمكن أن ننظر في بلدي "العازلة" والعمل على ما يحدث.
لا تنتمي إلى StackOverflow