Я использую 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-я команда выполняет все остальные ошибки. Что мне делать?