Ced*_*tin 5 ssh scp progress-information
我有一个非常奇怪的 SSH 行为,这让我有点紧张。基本上进度表完全是假的:假到几乎没用。而且我担心可能会发生其他事情(更多内容见下文)。
基本上我只有 60 KB/s 左右的上传链接,但我启动的每个 scp 都开始说它正在执行 2 MB/s。
然后它总是试图“修复”这个数字,慢慢地向真实值收敛。
然后,对于“大”文件(几 MB 或更多),它总是在 100% 停顿几秒钟(最终它成功了,我又回到了提示)。
输出如下所示:
...
test.tgz 16% 2112KB 2.1MB/s 00:04 ETA
test.tgz 17% 2208KB 1.7MB/s 00:06 ETA
test.tgz 18% 2320KB 1.2MB/s 00:08 ETA
test.tgz 19% 2448KB 1.1MB/s 00:08 ETA
test.tgz 20% 2576KB 942.2KB/s 00:10 ETA
test.tgz 21% 2704KB 697.3KB/s 00:14 ETA
test.tgz 22% 2832KB 576.3KB/s 00:16 ETA
test.tgz 23% 2960KB 478.3KB/s 00:20 ETA
test.tgz 24% 3088KB 399.0KB/s 00:23 ETA
test.tgz 25% 3216KB 334.7KB/s 00:27 ETA
test.tgz 26% 3344KB 282.6KB/s 00:32 ETA
test.tgz 27% 3472KB 240.4KB/s 00:37 ETA
test.tgz 28% 3600KB 185.6KB/s 00:48 ETA
test.tgz 29% 3728KB 161.9KB/s 00:54 ETA
test.tgz 30% 3856KB 142.7KB/s 01:01 ETA
...
Run Code Online (Sandbox Code Playgroud)
(它在一行上:我确实在这里粘贴了多行,我用它scp -vvv
来更好地解释我的问题)。
最后,当输出总是停留在 100% 时,实际上丢失了很多数据:我已经在另一端检查过,但文件肯定还没有完整存在。
所有的百分比测量基本上都是没有意义的:当它说 80% 的 12 MB 文件在那里时,服务器上只有大约 65%。
这有什么可以解释的?
我在这里发帖是因为我想知道如果中间人攻击发生在我的系统附近(可能是在受感染的路由器或其他东西上),这些数字会是什么样子。
我使用Linux和SSH / SCP多年以来,我不记得的是,这些数字是该关闭。
编辑
下载按预期工作:如果我从远程主机 scp 到我的计算机,那么 %、ETA 和 KB/s 都是正确的。
Gre*_*ill 11
这种行为很容易通过输出缓冲区大小和 TCP 窗口设置来解释。
首先,在接收数据时,您要么有这些位,要么没有。您的本地人scp
知道它的期望值是多少以及到目前为止已经收到了多少,因此它可以为您提供对进度和估计剩余时间的准确评估。
当您发送数据时,您尚不知道有多少数据实际到达接收方。您的本地机器将有一个输出缓冲区,用于在应用程序 (scp) “发送”数据之后和在网络上实际传输之前保存数据。此外,TCP 允许一定数量的数据在发送方和接收方之间“传输”。
发送数据时,scp
仅查看它已移交给操作系统以进行最终传输的数量。填充输出缓冲区的速度非常快,所以这就是scp
最初测量高传输速率的原因。随着传输的进行,该值向实际传输速率收敛。在您将所有数据交给您的操作系统后,它仍然必须到达另一端,这就是为什么它在最后几秒钟似乎“卡住”在 100%。
现代操作系统和 TCP 网络增加了 TCP 窗口大小(请参阅TCP 窗口缩放选项)以解决具有高带宽和高延迟的“长胖网络”。这就是为什么您可能比过去更频繁地看到这种行为。