    # 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