通过 ssh 验证 tar 输出的数据完整性

通过 ssh 验证 tar 输出的数据完整性

我正在创建一个备份脚本,该脚本使用tar,用 加密它gpg,然后将输出发送ssh到异地主机。我现在想知道天气如何以及如何验证所有数据是否已成功传输。由于备份大小为多个 GB,因此连接很有可能在中途断开。由于ssh使用,TCP我并不担心某些数据包被丢弃,但是当连接断开 20 秒或更长时间时怎么办?

这是我正在使用的命令:

tar \
    --create \
    ... \
    --listed-incremental="${metadata_file}" \
    --file - \
    "${FILES_TO_BACKUP[@]}" |
gpg --encrypt ... --output - |
ssh -T ${REMOTE_HOST} "cat > ${output_file}"

备份后,我还复制了元数据文件,我可以使用校验和来验证。但是备份本身呢?

有可能

  1. 将备份写入本地存储
  2. 复制到远程
  3. 验证校验和
  4. rm 本地备份

然而,由于我本地没有那么多的存储空间,所以如果可能的话我不想这样做。

我使用的是 Linux,安装的是 Bash >4.0。

答案1

您不必在本地保存文件来计算其校验和。

这个想法是将您选择的校验和实用程序添加到管道之后gpg和之前ssh,以在本地计算校验和而不将其保存到本地文件。为了避免将校验和发送给ssh您,您可以使用tee

这个想法是管道看起来像这样:

tar ... | gpg ... | tee >(checksum-utility > output-file) | ssh ...

因为output-file您可以使用真实文件或者也可以/dev/tty

例如,参见帖子 同时对输入进行校验和管道传输

相关内容