一个有关 ssh 的 shell 问题

一个有关 ssh 的 shell 问题

我发现一个 shell 命令可以向目标主机发送大量数据:

dd if=/dev/zero bs=4096 count=1048576 | ssh user@ip 'cat > /dev/null'

我想我可以用它来测试网络带宽,但它不能显示进程状态。

答案1

好吧,如果你把这整个事情包装起来time

time sh -c "dd if=/dev/zero bs=4096 count=1048576 | ssh user@ip 'cat > /dev/null'"

这将给出传输完成所需的时间。将传输的字节数除以时间,这就是您的吞吐量。

对于进度表,您可以使用光伏,这样就不需要使用时间(1)了:

dd if=/dev/zero bs=1024 count=10000 | pv --size 10240000 | ssh user@ip 'cat > /dev/null'

这将为您提供一个很好的进度表,特别是当您使用--size传输的总大小加载参数时。

答案2

如果您想要测试网络带宽,还有更直接的方法可以做到。

试用ttcp或其替代品:nuttcp

[tla ~]$ nuttcp -S

michael@challenger:~$ nuttcp -4 -r tla
   41.5574 MB /  10.46 sec =   33.3336 Mbps 2 %TX 4 %RX
michael@challenger:~$ nuttcp -4 -t tla
   15.4347 MB /  10.13 sec =   12.7821 Mbps 1 %TX 2 %RX 0 retrans 3.30 msRTT

答案3

发送SIGUSR1dd将导致它输出其进度。您可以计算后续调用之间的差异以获得近似速率。

答案4

通常最好使用 iperf 来测试带宽,因为它没有加密开销,但你可以插入光伏在 dd 和 ssh 之间实时查看传输速度:

dd if=/dev/random | pv | ssh somehost 'cat > /dev/null'

另外,在 FreeBSD 上,你可以通过按 Ctrl+T 向 dd 发送 SIGINFO,之后会显示一些统计数据(包括速度)

相关内容