سؤال

وأنا أحاول كتابة السيناريو روبي من شأنها أن 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 فقط، كما يمكن أن ننظر في بلدي "العازلة" والعمل على ما يحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top