wush

coderCC0-1.0长期未更新

基于 WireGuard 的点对点文件传输工具,无需配置即可在电脑间快速传文件,省去搭建服务器或复杂网络的麻烦。

simplest & fastest way to transfer files between computers via WireGuard

v0.4.1发布于 2025-01-07 01:52 UTC1,497star49fork同步于 2026-11-07 07:34 UTC

怎么上手

从 README 代码块原样提取,可能是其中一种安装方式
curl -fsSL https://github.com/coder/wush/raw/refs/heads/main/install.sh | sh
brew install wush
硬件要求

README 没有说明硬件要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

这个项目的说明还在生成中,先参考下面「最近发版」和 README。

最近发版

5 个版本v0.4.1
  1. v0.4.1最新正式版2025-01-07 · 2025-01-07 01:52 UTC

    What's Changed

    New Contributors

    Full Changelog: https://github.com/coder/wush/compare/v0.4.0...v0.4.1

  2. v0.4.02024-12-13 · 2024-12-13 18:05 UTC
    查看更新说明

    [!NOTE]
    In wush v0.4.0, the auth key formatting changed. v0.4.0 is not backwards compatible with v0.3.0.

    What's Changed

    New Contributors

    Full Changelog: https://github.com/coder/wush/compare/v0.3.0...v0.4.0

  3. v0.3.02024-10-03 · 2024-10-03 19:38 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/coder/wush/compare/v0.2.1...v0.3.0

  4. v0.2.12024-09-12 · 2024-09-12 21:22 UTC
    查看更新说明

    What's Changed

    Full Changelog: https://github.com/coder/wush/compare/v0.1.2...v0.2.1

  5. v0.1.22024-08-30 · 2024-08-30 20:39 UTC
    查看更新说明

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    wush

    Go Reference

    wush is a command line tool that lets you easily transfer files and open shells over a peer-to-peer WireGuard connection. It's similar to magic-wormhole but:

    1. No requirement to set up or trust a relay server for authentication.
    2. Powered by WireGuard for secure, fast, and reliable connections.
    3. Automatic peer-to-peer connections over UDP.
    4. Endless possibilities; rsync, ssh, etc.

    Basic Usage

    On the host machine:

    $ wush serve
    Picked DERP region Toronto as overlay home
    Your auth key is:
        >  112v1RyL5KPzsbMbhT7fkEGrcfpygxtnvwjR5kMLGxDHGeLTK1BvoPqsUcjo7xyMkFn46KLTdedKuPCG5trP84mz9kx
    Use this key to authenticate other wush commands to this instance.
    

    On the client machine:

    # Copy a file to the host
    $ wush cp 1gb.txt
    Uploading "1gb.txt" 100% |██████████████████████████████████████████████| (2.1/2.1 GB, 376 MB/s)
    
    # Open a shell to the host
    $ wush ssh
    ┃ Enter the Auth key:
    ┃ > 112v1RyL5KPzsbMbhT7fkEGrcfpygxtnvwjR5kMLGxDHGeLTK1BvoPqsUcjo7xyMkFn46KLTdedKuPCG5trP84mz9kx
    coder@colin:~$
    

    asciicast

    [!NOTE]
    wush uses Tailscale's tsnet package under the hood, managed by an in-memory control server on each CLI. We utilize Tailscale's public DERP relays, but no Tailscale account is required.

    Install

    Using install script

    curl -fsSL https://github.com/coder/wush/raw/refs/heads/main/install.sh | sh
    

    Using Homebrew

    brew install wush
    

    For a manual installation, see the latest release.

    [!TIP] To increase transfer speeds, wush attempts to increase the buffer size of its UDP sockets. For best performance, ensure wush has CAP_NET_ADMIN. When using the installer script, this is done automatically for you.

    # Linux only
    sudo setcap cap_net_admin=eip $(which wush)
    

    Technical Details

    wush doesn't require you to trust any 3rd party authentication or relay servers, instead using x25519 keys to authenticate incoming connections. Auth keys generated by wush serve are separated into a couple parts:

    112v1RyL5KPzsbMbhT7fkEGrcfpygxtnvwjR5kMLGxDHGeLTK1BvoPqsUcjo7xyMkFn46KLTdedKuPCG5trP84mz9kx
    
    +---------------------+------------------+---------------------------+----------------------------+
    | UDP Address (1-19B) | DERP Region (2B) |  Server Public Key (32B)  |  Sender Private Key (32B)  |
    +---------------------+------------------+---------------------------+----------------------------+
    | 203.128.89.74:57321 |               21 | QPGoX1GY......488YNqsyWM= | o/FXVnOn.....llrKg5bqxlgY= |
    +---------------------+------------------+---------------------------+----------------------------+
    

    Senders and receivers communicate over what we call an "overlay". An overlay runs over one of two currently implemented mediums; UDP or DERP. Each message over the relay is encrypted with the sender's private key.

    UDP: The receiver creates a NAT holepunch to allow senders to connect directly. WireGuard nodes are exchanged peer-to-peer. This mode will only work if the receiver doesn't have hard NAT.

    DERP: The receiver connects to the closet DERP relay server. WireGuard nodes are exchanged through the relay.

    In both cases auth is handled the same way. The receiver will only accept messages encrypted from the sender's private key, to the server's public key.

    Why create another file transfer tool?

    Lots of great file tranfer tools exist, but they all have some limitations:

    1. Slow speeds due to relay servers.
    2. Trusting a 3rd party server for authentication.
    3. Limited to only file transfers.

    We sought to utilize advancements in userspace networking brought about by Tailscale to create a tool that could solve all of these problems, and provide way more functionality.

    Acknowledgements

    1. Tailscale
    2. Headscale
    3. WireGuard-go