docstr: parse host name string into full host spec:
  `username@ip` or `username@ip:port` or `username@ip ssh_key` or `username@ip:port ssh_key`
  :param host: host name string
docstr_tok: ["parse","host","name","string","into","full","host","spec",":","`","username","@","ip","`","or","`","username","@","ip",":","port","`","or","`","username","@","ip","ssh_key","`","or","`","username","@","ip",":","port","ssh_key","`",":","param","host",":","host","name","string"]
code: def __init__(self, host):
      """
      parse host name string into full host spec:
      `username@ip` or `username@ip:port` or `username@ip ssh_key` or `username@ip:port ssh_key`
      :param host: host name string
      """
      (
          self.username,
          self.hostname,
          self.port,
          self.key,
      ) = parse_hostname(host)
  
      client = pm.SSHClient()
      client.load_system_host_keys()
      client.set_missing_host_key_policy(pm.AutoAddPolicy())
      self.client = client
  
imports: import json
  import logging
  import os
  import sys
  import time
  import threading
  import paramiko
  from .CPUResourceManager import CPUResourceManager
  from ...utils import check_missing_key, load_default_env, parse_result, DEFAULT_AUPTIMIZER_PATH, block_until_ready
  from ...utils import open_sftp_with_timeout, parse_one_line
  from ..Job import Job
label_desc: Use image node_id 1 to create a new Remote object from inherited base classes: object with example: obj = Remote(host)