docs: def channel(self):
          """ channel lazy property """
          # start shell, non-blocking channel
          chan = self.cli.invoke_shell(width=360, height=80)
          chan.setblocking(0)
          # set channel timeout
          chan.settimeout(10)
          # now waiting for shell prompt ('username@')
          result = ""
          count = 0
          while count < 10:
              try:
                  recv_part = chan.recv(16384).decode()
                  result += recv_part
              except socket.timeout:
                  # socket.timeout here means 'no more data'
                  pass
  
              if result.find('%s@' % self.username) != -1:
                  return chan
              time.sleep(1)
              count += 1
          # failed to get shell prompt on channel :-(
          raise StitchesConnectionException("Failed to get shell prompt")