2017-01-18 10 views
1

Я подключаюсь к серверу, хочу запустить команду и распечатать вывод. Вот код:Не получать результат/результат команды SSH

def log_in 
    Net::SSH.start('hostname', 'username', :password => "password") do |ssh| 
    ssh.open_channel do |channel| 
     output = channel.exec "ls" do |ch, success, data| 
     if success then 
      alert "Result: #{output} #{success} #{data}" 
     end 
     end 
    end 
    end 
end 

В результате «выход» является пустой список [], «успех» и правдивой «данные» порожняком. Очевидно, это не должно быть так, как когда я вошел в систему через терминал и нажимаю команду «ls», есть несколько файлов/папок. Где моя ошибка?

Интересно, если я отправлю тарабарщину как команду, например. вместо «ls» я отправляю «asdfgh», он возвращает то же самое ([], true, empty). Использование обуви/Рубин.

ответ

1

Посмотрите на docs. Блок, который вы передаете как второй аргумент методу exec, ожидает только два аргумента ch и success. Вам нужно убедиться, что вы добавили обратный вызов, который срабатывает, когда данные доступны. Например:

channel.on_data do |ch, data| 
    puts "got stdout: #{data}" 
end 

Вы также можете использовать метод ssh.exec.

1

Это работает:

Net::SSH.start('hostname', username, :password => password) do |ssh| 
    ssh.open_channel do |channel| 
    output = channel.exec "ls" do |ch, success, data| 
     if success then 
     channel.on_data do |ch, data| 
      alert "#{data}" 
     end 
     end 
    end 
    end 
    ssh.loop 
end 

Проблема была, существует приветственное сообщение при входе в систему (и первая строка его пустым). «Ssh.loop» позволяет просматривать все строки приветственного сообщения и, наконец, результат команды «ls».

 Смежные вопросы

  • Нет связанных вопросов^_^