#文件传输 #ssh #延迟 #字符 #回声 #交互式 #测量

应用 sshping

基于 SSH 的 ping 工具,用于测量交互式字符回声延迟和文件传输吞吐量。发音为 "shipping"。

4 个版本

0.1.3 2024 年 6 月 14 日
0.1.2 2024 年 6 月 13 日
0.1.1 2024 年 6 月 13 日
0.1.0 2024 年 6 月 13 日

#202文本处理

MIT 许可证

42KB
811 代码行

SSH ping

Crates.io Version Crates.io License Crates.io Total Downloads Crates.io Downloads (latest version) GitHub Repo stars

基于 SSH 的 ping 工具,用于测量交互式字符回声延迟和文件传输吞吐量。发音为 "shipping"。

是原始 ssh-ping 在 Rust 中的延续和改进。

安装

Cargo

sshping 已发布在 crates.io,您可以使用 cargo 安装它(首先需要安装 Rust 工具链)

cargo install sshping

您也可以选择启用 include-openssl 功能,以便将 OpenSSL 打包到二进制文件中,以应对系统 OpenSSL 不可用的情况

cargo install sshping -F include-openssl

预构建的二进制文件

预构建的二进制文件可在 版本页面 上找到。您可以为您的平台下载二进制文件,并将其放入您的 $PATH 中。

请注意,所有预构建的二进制文件都是启用 include-openssl 功能构建的,因此它们是自包含的,不需要在系统上安装 OpenSSL。

从源代码安装

要从源代码安装,您首先可以克隆存储库

git clone [email protected]:TeddyHuang-00/sshping.git
# Or
git clone https://github.com/TeddyHuang-00/sshping.git

# Then
cd sshping

然后使用 cargo 构建和安装它

cargo install --path .

include-openssl 功能一样,您也可以在从源代码安装时启用它

cargo install --path . -F include-openssl

用法

Usage: sshping [OPTIONS] <TARGET>

Arguments:
  <TARGET>  [user@]host[:port]

Options:
  -f, --config <FILE>            Read the ssh config file FILE for options [default:
                                 ~/.ssh/config]
  -i, --identity <FILE>          Use identity FILE, i.e., ssh private key file
  -p, --password <PWD>           Use password PWD for authentication (not recommended)
  -T, --ssh-timeout <SECONDS>    Time limit for ssh connection in seconds [default: 10]
  -r, --run-tests <TEST>         Run TEST [default: both] [possible values: echo, speed,
                                 both]
  -c, --char-count <COUNT>       Number of characters to echo [default: 1000]
  -e, --echo-cmd <CMD>           Use CMD for echo command [default: "cat > /dev/null"]
  -t, --echo-timeout <SECONDS>   Time limit for echo test in seconds
  -s, --size <SIZE>              File SIZE for speed test [default: 8.0MB]
  -u, --chunk-size <CHUNK_SIZE>  Chunk SIZE for splitting file in speed test [default: 1.0MB]
  -z, --remote-file <FILE>       Remote FILE path for speed tests [default:
                                 /tmp/sshping-test.tmp]
  -b, --table-style <STYLE>      Table style for output [default: ascii] [possible values:
                                 empty, blank, ascii, psql, markdown, modern, sharp,
                                 extended, dots, rst, rounded, ascii-rounded, modern-rounded]
  -d, --delimiter <DELIMITER>    Specify delimiters to use (or None for not using) in big
                                 numbers [default: ,]
  -H, --human-readable           Use human-friendly units
  -k, --key-wait                 Wait for keyboard input before exiting
  -v, --verbose...               Show verbose output, use multiple for more noise
  -h, --help                     Print help (see more with '--help')
  -V, --version                  Print version

示例

以人类可读的输出和现代表格风格(圆角)ping SSH 配置中的主机

$ sshping OverLAN -H -b modern-rounded
╭─────────┬───────────────┬─────────────╮
  Test   │    Metric     │   Result    │
├─────────┼───────────────┼─────────────┤
   SSH   │ Connect time  │ 49ms 775us  │
├─────────┼───────────────┼─────────────┤
         │    Average    │ 177us 731ns │
         ├───────────────┼─────────────┤
         │ Std deviation │ 59us 706ns  │
         ├───────────────┼─────────────┤
 Latency │    Median     │ 203us 263ns │
         ├───────────────┼─────────────┤
         │    Minimum    │ 11us 387ns  │
         ├───────────────┼─────────────┤
         │    Maximum    │ 270us 20ns  │
├─────────┼───────────────┼─────────────┤
         │    Upload     │  153 MB/s   │
  Speed  ├───────────────┼─────────────┤
         │   Download    │  89.2 MB/s  │
╰─────────┴───────────────┴─────────────╯

以用户名和端口 ping 某个主机,使用 _ 作为分隔符并指定特定的身份文件

$ sshping user@host:7890 -i ~/.ssh/id_rsa -d _
+---------+---------------+-----------------+
|  Test   |    Metric     |     Result      |
+---------+---------------+-----------------+
|   SSH   | Connect time  |  49_725_720ns   |
+---------+---------------+-----------------+
|         |    Average    |    10_268ns     |
|         +---------------+-----------------+
|         | Std deviation |     3_055ns     |
|         +---------------+-----------------+
| Latency |    Median     |     9_773ns     |
|         +---------------+-----------------+
|         |    Minimum    |     8_075ns     |
|         +---------------+-----------------+
|         |    Maximum    |    40_603ns     |
+---------+---------------+-----------------+
|         |    Upload     | 127_897_360 B/s |
|  Speed  +---------------+-----------------+
|         |   Download    | 94_500_777 B/s  |
+---------+---------------+-----------------+

贡献

欢迎贡献!请随意打开一个问题或拉取请求。从错误报告到功能请求到代码贡献,我们都很感激。

目前,还有一些可以添加但尚未添加的功能。如果您想帮忙但不知道从何开始,您可以查看以下列表

  • 表格样式定制
  • 单元测试
  • 手册页生成
  • Shell 自动完成脚本生成
  • 针对各种平台的打包
  • 更多 SSH 测试
  • 更好的错误处理
  • 代码优化

常见问题解答

如何使用公私钥对进行身份验证?

建议使用公私钥对,您可以通过 -i 参数提供身份文件(私钥)路径,或者通过将身份文件添加到您的 ssh agent 来使用代理认证

# Start SSH agent if you haven't already
eval `ssh-agent -s`
# Add identity to agent (assuming it is `~/.ssh/id_rsa`)
ssh-add ~/.ssh/id_rsa

为什么 SSH 不支持 XXX 功能?

由于上游库的限制,许多功能(如 ProxyJumpBindAddress)目前不支持。

如果它们在上游库中得到了实现,它们也将被添加到这个项目中。或者您也可以打开一个 pull request 来自己添加它们!

为什么我的 SSH 配置文件中的所有身份文件都没有被使用?

如果配置文件中提供了多个身份文件,只有第一个将被使用。这是一个为了保持实现简单而做出的有偏见的设计选择。

依赖项

~9-20MB
~290K SLoC