Net :: S SH Как запустить более 1 команды в одном канале - PullRequest
0 голосов
/ 17 марта 2020

Я использую net / s sh gem для выполнения списка команд. Я хочу выполнить более 1 команды в одном канале. Но on_close вызывается до того, как я смогу ввести следующую команду.

Я не хочу открывать несколько каналов для каждой команды, я могу открыть не более 10 каналов за сеанс, , потому что MaxSessions по умолчанию 10 , и у меня более 10 команд.

Вот что я пытаюсь сделать:

require "net/ssh"

config = {
  host: "1.2.3.4",
  user: "user1",
  :options=>{
    :keys_only=>true,
    :keys=>["/path/to/id_rsa"]
  }
}

commands = []

5.times do |i|
  commands.push("echo 'Hello World: #{i}'")
end

Net::SSH.start(config[:host], config[:user], config[:options]) do |ssh|
  ssh.open_channel do |channel|
    commands.each do |command|
      channel.exec(command) do |ch, success|
        puts "Failed `#{command}`" if !success

        ch.on_data do |ch, data|
          puts data
        end
      end

      channel.on_extended_data do |ch, data|
        puts "Error: #{data}"
      end

      channel.on_close do |ch|
        puts "Channel Closed"
      end
    end
  end
  ssh.loop
end

Вывод

Failed `echo 'Hello World: 1'`
Failed `echo 'Hello World: 2'`
Failed `echo 'Hello World: 3'`
Failed `echo 'Hello World: 4'`
Hello World: 0
Channel Closed

Только 1-я команда выполняет все остальные ошибки. Что мне делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...