fdroid
@fdroid
press any key

Как эмулировать ввод в терминале?

Есть система по централизованному сбору конфигов сетевого оборудования - oxidized. В общем и целом работает, за исключением одного нюанса - свитчи D-Link, на которых настроена аутентификация по RADIUS, для доступа к show config, который требуется oxidized для получения конфига, нужен ввод команды enable и последующего ввода пароля для повышения привилегий. Для каждого вендора существует файл настроек, для D-Link он такой:

class Dlink < Oxidized::Model
  # D-LINK Switches

  prompt /^(\r*[\w.@()\/:-]+[#>]\s?)$/
  comment '# '

  cmd :secret do |cfg|
    cfg.gsub! /^(create snmp community) \S+/, '\\1 <removed>'
    cfg.gsub! /^(create snmp group) \S+/, '\\1 <removed>'
    cfg
  end

  cmd :all do |cfg|
    cfg.each_line.to_a[2..-2].map { |line| line.delete("\r").rstrip }.join("\n") + "\n"
  end

  cmd 'show switch' do |cfg|
    cfg.gsub! /^System Uptime\s.+/, '' # Omit constantly changing uptime info
    comment cfg
  end

  cmd 'show vlan' do |cfg|
    comment cfg
  end

  cmd 'show config current'

  cfg :telnet do
    username /\r*[Uu]ser[Nn]ame:/
    password /\r*[Pp]ass[Ww]ord:/
  end

  cfg :telnet, :ssh do
    post_login 'disable clipaging'
    pre_logout 'logout'
  end
end


Где-то между show vlan и show config current требуется сэмулировать такую последовательность, которую oxidized отправит на свитч:

enable admin #повышаем привилегии, затем Enter
#здесь вводится пароль, который не отображается, можно просто захардкодить в этом файле, затем Enter

В программировании я ноль, пытался сделать по аналогии, но не получается, что-то упускаю.
  • Вопрос задан
  • 359 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы