# File lib/fog/core/ssh.rb, line 62
      def run(commands, &blk)
        commands = [*commands]
        results  = []
        begin
          Net::SSH.start(@address, @username, @options) do |ssh|
            commands.each do |command|
              result = Result.new(command)
              ssh.open_channel do |ssh_channel|
                ssh_channel.request_pty
                ssh_channel.exec(command) do |channel, success|
                  unless success
                    raise "Could not execute command: #{command.inspect}"
                  end

                  channel.on_data do |ch, data|
                    result.stdout << data
                    yield [data, ''] if blk
                  end

                  channel.on_extended_data do |ch, type, data|
                    next unless type == 1
                    result.stderr << data
                    yield ['', data] if blk
                  end

                  channel.on_request('exit-status') do |ch, data|
                    result.status = data.read_long
                  end

                  channel.on_request('exit-signal') do |ch, data|
                    result.status = 255
                  end
                end
              end
              ssh.loop
              results << result
            end
          end
        rescue Net::SSH::HostKeyMismatch => exception
          exception.remember_host!
          sleep 0.2
          retry
        end
        results
      end