#ssh-client #ssh #client-server #std #async-await #suitable

no-std sunset

适用于嵌入式和大型程序的 SSH 库

2 个不稳定版本

0.2.0 2024 年 3 月 3 日
0.1.0 2022 年 9 月 22 日

网络编程 中排名 1193

每月下载量 26
用于 2 crates

0BSD 许可证

290KB
6.5K SLoC

Sunset SSH

一个 SSH 客户端和服务器实现。它旨在非常灵活,几乎可以嵌入到任何地方,我在 讨论 中收集了可能的用例。不要犹豫,提出建议!

此软件处于早期阶段。它适用于某些应用,但肯定会发生 API 更改

  • sunset(此顶层)是核心 SSH 实现。它提供非异步 API,以 no_std 和无分配运行。

  • sunset-embassy - 异步 SSH 客户端和服务器库,也是 no_std。此库使用 Embassy crate,但对异步执行器无关。

  • embassy/demos 包含使用 Embassy 执行器在 Raspberry Pi 上进行 wifi 的演示,或者在一个 Pico W 或在 std 的 Linux tap 设备上运行本地

    目前 Pico W 的构建大小约为 150kB 二进制文件(加上 ~200KB 的 cyw43 wifi 固件),每个并发 SSH 会话使用约 15kB RAM(最大堆栈大小尚未确认)。

  • sunset-async 为在正常 Rust(非 no_std)中将 Sunset 作为正常 SSH 客户端或服务器异步库使用添加了功能。此库使用 Tokio 或 async-std。

    示例包括 Linux 命令行 SSH 客户端 sunsetc。它作为日常 SSH 客户端运行。

SSH 功能

工作

  • shell 或命令连接
  • 密码和公钥认证
  • ed25519 签名
  • curve25519 密钥交换
  • chacha20-poly1305, aes256-ctr 加密算法
  • hmac-sha256 完整性验证
  • rsa(除非有人编写了 no_std crate,否则仅限 std
  • ~. 客户端转义序列

推荐

  • TCP 转发
  • dh-group14(可能仅限 std,需要调查 crates)
  • 可能 aes256-gcm
  • 可能 ECDSA,硬件通常比 ed25519 更早支持它
  • SFTP

Rust 版本

目前 Sunset 将使用最新的稳定版(撰写时为 1.75)。

安全性

Sunset 使用 forbid(unsafe),除了 sunset-async,它需要 unsafe 以进行 Unix 交互。

发布构建不应崩溃,而是应返回 Error::bug()。在测试或模糊测试期间,某些地方使用 debug_assert! 用于不变量。

已尝试在使用后清除敏感内存,但栈副本不会被清除。

作者

马特·约翰逊 [email protected]

它建立在大量其他工作的基础上,特别是 Embassy,rust-crypto crates,Virtue,smoltcp 和 Salty。

依赖项

~4.5–7MB
~142K SLoC