Использование ruby ​​gem net-ssh-multi для выполнения команды sudo сразу на нескольких серверах

В предыдущем вопросе я выяснил, как запустить сеанс ssh с паролем на нескольких серверах для выполнения одной команды. Теперь мне нужно иметь возможность выполнить команду sudo. Проблема в том, что net-ssh-multi не выделяет псевдотерминал (pty), который необходимо запустить sudo, что приводит к следующей ошибке:

[127.0.0.1: stderr] sudo: извините, у вас должен быть tty для запуска sudo

Согласно документации , псевдотерминал может быть выделен с помощью вызова метода для канала однако следующий код не работает: он генерирует указанную выше ошибку «нет tty»:

require 'net/ssh'
require 'net/ssh/multi'

Net::SSH::Multi.start do |session|


  # define the servers we want to use
  my_ticket.servers.each do |session_server|
    session.use session_server , :user =>  user_name ,  \
                              :password => user_pass
  end


 # execute commands on all servers
  session.exec 'sudo ls /root' do |channel, stream, data|
   if data =~ /^\[sudo\] password for user:/
     channel.request_pty # <- problem must be here.
     channel.send_data user_pass
   end

  end

 # run the aggregated event loop
 session.loop
end

$ ruby ​​--version

ruby ​​1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]

5
задан Community 23 May 2017 в 12:29
поделиться