code: func NewRemoteExecutor(sshCfg SshConfig) (executor Executer, err error) {
  	clientconfig := &ssh.ClientConfig{
  		User:            sshCfg.Username,
  		Auth:            sshCfg.GetAuthMethod(),
  		HostKeyCallback: ssh.InsecureIgnoreHostKey(),
  	}
  	remoteExecutor := &DefaultRemoteExecutor{}
  	remoteExecutor.LazyClientDial = func() {
  		client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", sshCfg.Host, sshCfg.Port), clientconfig)
  		if err != nil {
  			lo.G.Error("ssh connection issue:", err)
  			return
  		}
  		remoteExecutor.Client = NewClientWrapper(client)
  	}
  	executor = remoteExecutor
  	return
  }
docs: //NewRemoteExecutor - This method creates executor based on ssh, it has concrete ssh reference