async scpCopyFromRemote(src, dest, { ignores, ...cmdOptions } = {}) {
    const archive = path.basename(await tmpName({ postfix: '.tar.gz' }))
    const srcDir = path.dirname(src)
    const srcArchive = path.join(srcDir, archive)
    const remoteSrcArchive = `${formatRemote(this.remote)}:${srcArchive}`

    const compress = joinCommandArgs([
      formatCdCommand({ folder: srcDir }),
      '&&',
      formatTarCommand({
        mode: 'compress',
        file: path.basename(src),
        archive,
        excludes: ignores,
      }),
    ])

    const createDestFolder = formatMkdirCommand({ folder: dest })

    const copy = formatScpCommand({
      port: this.remote.port,
      key: this.options.key,
      src: remoteSrcArchive,
      dest,
    })

    const cleanSrc = joinCommandArgs([
      formatCdCommand({ folder: srcDir }),
      '&&',
      formatRmCommand({ file: archive }),
    ])

    const extract = joinCommandArgs([
      formatCdCommand({ folder: dest }),
      '&&',
      formatTarCommand({ mode: 'extract', archive }),
    ])

    const cleanDest = joinCommandArgs([
      formatCdCommand({ folder: dest }),
      '&&',
      formatRmCommand({ file: archive }),
    ])

    return this.aggregate([
      () => this.run(compress, cmdOptions),
      () => this.runLocally(createDestFolder, cmdOptions),
      () => this.runLocally(copy, cmdOptions),
      () => this.run(cleanSrc, cmdOptions),
      () => this.runLocally(extract, cmdOptions),
      () => this.runLocally(cleanDest, cmdOptions),
    ])
  }
Run a copy from the remote to the local using scp.
All exec options are also available.

@see https://nodejs.org/dist/latest-v8.x/docs/api/child_process.html#child_process_child_process_exec_command_options_callback
@param {string} src Source
@param {string} dest Destination
@param {object} [options] Options
@param {string[]} [options.ignores] Specify a list of files to ignore.
@param {...object} [cmdOptions] Command options
@returns {MultipleExecResult}
@throws {ExecError}