2015-04-24 4 views
0

В моем проекте я хочу написать скрипт, чтобы проверить, доступно ли для каждого устройства в моей сети/доступно. У меня есть метод, называемый pingtest и он работает на данный момент ..Ruby - проверка состояния ping featback с ssh, backtick через ssh?

def pingtest(destination) 
    system("ping -n 2 #{destination}") 
    if $? == 0        #checking status of the backtick 
     puts "\n Ping was successful!" 
    else 
     close("Device is unreachable. Check the config.txt for the correct IPs.") 
     #close() is just print & exit.. 
    end 
end 

Теперь я хотел свистеть через SSH сессии с другим устройством в моей сети:

#-------------------------------- 
require 'net/ssh' 
Net::SSH.start(@ip, @user, :password => @password) 
#-------------------------------- 

@ssh = Ssh.new(@config) 
@ssh.cmd("ping -c 3 #{@IP}") 

пинг работает отлично, но как могу ли я использовать мою идею возврата назад, чтобы определить, было ли это успешным или нет?
Я думал об использовании соединения SFTP ..

"пинг -c 3 # {@} IP => tmpfile.txt" => скачать => проверить/сравнить => удалить

(или что-то в этом роде), чтобы проверить, было ли это правильно, но im not statusfied с этим. Есть ли возможность проверить статус успеха, как раньше?
я тоже пытался что-то вроде этого ..

result = @ssh.cmd("ping -c 3 #{@IP}") 
if result.success? == 0 # and so on.. 

Я обучение рубина запущен при несколько дней назад, так что им новичок с нетерпением ждет ваших идеи, чтобы помочь мне с этой проблемой.

ответ

1

Вы можете использовать Net :: SSH для запуска команды удаленно, аналогично тому, что у вас уже есть.

result, возвращенный из запускающей команды, будет записываться как на stdout, так и на stderr.

Вы можете использовать содержимое возвращаемого значения, чтобы проверить, было ли оно успешным или нет.

Net::SSH.start(@ip, @user. password: @password) do |ssh| 
    response = ssh.exec! "ping -c 3 #{@other_ip}" 
    if response.include? 'Destination Host Unreachable' 
    close("Host unreachable. Result was: #{result}") 
    else 
    puts "\n Ping was successful" 
    end 
end 
+0

'«блок в (MyMethod)»не определено локальная переменная или метод«ответ»для # ' Похоже есть что-то отсутствует. Я пробовал несколько вещей, но теперь я думаю, что у меня просто нет метода ответа. Нужно ли мне реализовать что-то еще? – Drayke

+0

Ах да, извините, переименовали некоторые переменные и забыли. Я исправил это. –