7个版本

0.1.5 2024年4月19日
0.1.5-dev2024年4月16日
0.1.4+autopublish2024年3月17日
0.1.2 2024年1月3日
0.1.1 2023年5月2日

#1266网络编程

每月25次下载

MIT 许可证

26KB
441 代码行

quicssh-rs

😄 quicssh-rs 是一个QUIC代理,允许使用QUIC连接到SSH服务器,无需修补客户端或服务器。

quicssh-rsquicssh 的Rust实现。它基于 quinntokio

为什么使用QUIC?因为SSH在TCP连接环境中容易受到攻击,而且大多数SSH数据包实际上很小,因此只需要保持SSH连接就可以在任何网络环境中使用。QUIC是一个很好的选择,因为它具有良好的弱网络优化和重要的连接迁移功能。这意味着我可以在远程时自由切换Wi-Fi网络,确保SSH连接的稳定性。

演示

https://user-images.githubusercontent.com/39181969/235409750-234de94a-1189-4288-93c2-45f62a9dfc48.mp4

为什么不使用mosh?

因为mosh的架构需要打开许多端口以支持控制和数据连接,这在许多环境中不太友好。此外,vscode远程开发不支持mosh。

架构

标准SSH连接

┌───────────────────────────────────────┐             ┌───────────────────────┐
│                  bob                  │             │         wopr          │
│ ┌───────────────────────────────────┐ │             │ ┌───────────────────┐ │
│ │           ssh user@wopr           │─┼────tcp──────┼▶│       sshd        │ │
│ └───────────────────────────────────┘ │             │ └───────────────────┘ │
└───────────────────────────────────────┘             └───────────────────────┘

通过QUIC代理的SSH连接

┌───────────────────────────────────────┐             ┌───────────────────────┐
│                  bob                  │             │         wopr          │
│ ┌───────────────────────────────────┐ │             │ ┌───────────────────┐ │
│ │ssh -o ProxyCommand "quicssh-rs    │ │             │ │       sshd        │ │
│ │ client quic://%h:4433             │ │             │ └───────────────────┘ │
│ │       user@wopr                   │ │             │           ▲           │
│ └───────────────────────────────────┘ │             │           │           │
│                   │                   │             │           │           │
│                process                │             │  tcp to localhost:22  │
│                   │                   │             │           │           │
│                   ▼                   │             │           │           │
│ ┌───────────────────────────────────┐ │             │┌─────────────────────┐│
│ │  quicssh-rs client wopr:4433      │─┼─quic (udp)──▶│   quicssh-rs server ││
│ └───────────────────────────────────┘ │             │└─────────────────────┘│
└───────────────────────────────────────┘             └───────────────────────┘

用法

$ quicssh-rs -h
A simple ssh server based on quic protocol

Usage: quicssh-rs <COMMAND>

Commands:
  server  Server
  client  Client
  help    Print this message or the help of the given subcommand(s)

Options:
      --log <LOG_FILE>         Location of log, Default if
      --log-level <LOG_LEVEL>  Log level, Default Error
  -h, --help                   Print help
  -V, --version                Print version

客户端

$ quicssh-rs client -h
Client

Usage: quicssh-rs client [OPTIONS] <URL>

Arguments:
  <URL>  Server address

Options:
  -b, --bind <BIND_ADDR>  Client address
  -h, --help              Print help
  -V, --version           Print version

客户端SSH配置

╰─$ cat ~/.ssh/config
Host test
    HostName test.test
    User root
    Port 22333
    ProxyCommand /Users/ouyangjun/code/quicssh-rs/target/release/quicssh-rs client quic://%h:%p

╰─$ ssh test
Last login: Mon May  1 13:32:15 2023 from 127.0.0.1

服务器

$ quicssh-rs server -h
Server

Usage: quicssh-rs server [OPTIONS]

Options:
  -l, --listen <LISTEN>        Address to listen on [default: 0.0.0.0:4433]
  -p, --proxy-to <PROXY_TO>  Address of the ssh server [default: 127.0.0.1:22]
  -h, --help                   Print help
  -V, --version                Print version

依赖项

~17–26MB
~512K SLoC