惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
WordPress大学
WordPress大学
U
Unit 42
I
InfoQ
A
About on SuperTechFans
宝玉的分享
宝玉的分享
J
Java Code Geeks
博客园 - 司徒正美
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
人人都是产品经理
人人都是产品经理
小众软件
小众软件
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
腾讯CDC
Recent Announcements
Recent Announcements

Show HN

GitHub - astefanutti/shaderbang: Shebang for Shaders Show HN: AI agents for UK GDAD PCF roles and their skills The Two Pillars: Mixer Mode and Meta-Software in the Reorganization of Software Work After AI GitHub - JaiCode08/teleport-env What 1,000+ Harness Experiments Taught Me About Self-Improving Agents Show HN: Liiists, a Markdown-first, iOS and CLI list app SwiperTab – Get this Extension for 🦊 Firefox (en-US) GitHub - kouhxp/fftext: Summarize, explain, fact-check, or translate any text, URL, or file. No GPU. No cloud. One command GitHub - sweetpad-dev/sweetpad: Develop Swift/iOS projects using VSCode GitHub - dogmaticdev/IRON: IRON a.k.a. Intermediate Representation Object Notation is a Interpreter/Database that is used to create Programming Languages. GitHub - sjhalani7/vaen: Package your AI coding harness into a portable .agent file, and share it across repos, teams, & the community without ever having to copy-paste instructions, skills, MCP config, or secrets. Show HN: Gandalf the Grader Show HN: Citadeld – replay any CI failure locally from a single file GitHub - tdortman/cuSBF: High-Performance GPU Super Bloom Filter coral-ai/claude-code-token-xray at main · Coral-Bricks-AI/coral-ai GitHub - ulyssestenn/funes: Funes is a Git-based framework for LLM-managed knowledge work: an AI Librarian ingests raw sources, builds an interlinked Markdown knowledge base, and uses it to produce cited reports, analyses, and other outputs. GitHub - ThatXliner/gah: Git Add Hunk, built for agents to use GitHub - harmont-dev/harmont-cli: Command-line client for the Harmont CI platform GitHub - brooksmcmillin/mcp-authflow: OAuth 2.0 Authorization Server framework for MCP servers GitHub - javaid-codes/audit-supply-chain-agents GitHub - amorey/gochan: A small library of common channel architectures for Go, inspired by Rust GitHub - arifozgun/OpenGem: Free, Open-Source AI API Gateway with Gemini, OpenAI & Anthropic Compatibility in 1 file GitHub - Pranesh950/BioPetals: 🌸 Run BIOxAI models at home, BitTorrent-style. Fine-tuning and inference up to 10x faster than offloading GitHub - cnguyen14/bounty-doctor: Diagnose a GitHub bounty issue before you waste hours: detects honeypot scam repos, AI-bot attempt swarms, and stale contests. Show HN: CoreMCP – MCP Server for On-Prem DBs Show HN: KittyHTML – Render HTML/CSS as an inline image in your terminal GitHub - bingud/filemat: Web-based file manager Show HN: TruthLens – Free multi-signal deepfake image detector GitHub - apexlocal-jz/claude-usage-tray: Windows system-tray app showing your Claude Code rate-limit usage at a glance. Zero deps, ~300 lines of PowerShell. Cross-IDE (works regardless of VS Code, Cursor, plain terminal). Release v0.1.2.1 · kouhxp/yapsnap
GitHub - Endlessite/tubo: Send files between machines. No...
mazz0ni · 2026-06-23 · via Show HN


License Release Build Zero Install E2EE

The zero-install file transfer for locked-down servers.
No root. No binaries. Pure POSIX shell. End-to-end encrypted. Always.

Tubo Demo


Why Tubo?

Most file transfer tools either require accounts (WeTransfer, Google Drive), expose data to the server (scp through a jumphost), or need root to install (rsync, netcat).

Tubo is different:

  • True E2E Encryption — The server is a blind pipe. It relays encrypted bytes it cannot read. The key never leaves your machines.
  • Zero-Install Mode — SSH'd into a production server with no tools? Use curl | sh. It works with just curl and openssl.
  • No Root, No Accounts — The binary goes in ~/.local/bin. No sign-ups, no API keys, no config files.
  • Directories & Compression — Stream entire folders on-the-fly with --compress. No temporary zip files.
  • Integrity Verified — SHA-256 checksum compared automatically after every transfer.

Quick Start

Install (one-liner, no root)

curl -sL https://tubo.endlessite.com/get | sh

Send a file

Copy the token it prints, then on the other machine:

Receive

tubo receive e4f2a1-8xZpL9q4-aB3k9Xm2pQ7rT1wZ

Send a directory (compressed)

tubo send ./my-project --compress

Pipe from stdin

echo "secret message" | tubo send -

The POSIX Superpower (Zero-Install)

Tubo is built to work everywhere, especially where other tools fail.

Are you SSH'd into a locked-down production server where you can't install binaries (no root, noexec mounts, strict corporate policies)? Just use the fallback script:

Send:

curl -sL https://tubo.endlessite.com/run | sh -s send database.sql e4f2a1-8xZpL9q4-aB3k9Xm2pQ7rT1wZ

Receive:

curl -sL https://tubo.endlessite.com/run | sh -s receive e4f2a1-8xZpL9q4-aB3k9Xm2pQ7rT1wZ

This script does not download a binary executable. It relies purely on curl and openssl — tools that already exist on almost every UNIX system. It runs directly in memory on any POSIX-compliant shell (sh, bash, zsh, dash, ash) without triggering execution blocks.

Is curl | sh safe? You can always download the script first with curl -sL https://tubo.endlessite.com/run -o run.sh, read the code, then run sh run.sh receive <token>. The script is 150 lines of simple shell — we encourage you to audit it.

The Pure Bash Proof (No Scripts at all)

If you don't even want to run the run.sh wrapper, you can pipe curl directly into openssl. You don't have to remember the exact syntax—just add --manual to the CLI:

tubo send database.sql --manual
# Or for receiving: tubo receive <token> --manual

This will print out the exact, pure POSIX shell commands to execute the transfer. Given a token ID-PASSWORD-KEY, you derive the AES-256 key and IV using SHA-512(KEY). Then you run:

Send manually:

cat database.sql \
  | openssl enc -e -aes-256-ctr -K "$AES_KEY" -iv "$AES_IV" \
  | curl --data-binary @- -H "X-File-Name: database.sql" -u "tubo:$PASSWORD" "https://tubo.endlessite.com/$ID"

Receive manually:

curl -u "tubo:$PASSWORD" "https://tubo.endlessite.com/$ID" \
  | openssl enc -d -aes-256-ctr -K "$AES_KEY" -iv "$AES_IV" > database.sql

This proves Tubo is just standard AES-256-CTR streaming over HTTP!


Self-Hosting

Don't want to use the public relay? Run the open-source relay in 30 seconds:

cd server
mvn clean package
java -jar target/server-1.0.0-SNAPSHOT-fat.jar

Then point your CLI to it (once):

tubo config server your-server.com:8080

The relay server requires Java 17+ and ~10MB of RAM. It stores nothing on disk.

Set the PORT environment variable to change the listening port: PORT=443 java -jar server.jar


How It Works

┌──────────┐       ┌─────────────────┐       ┌──────────────┐
│  Sender  │──────▶│  Relay Server   │──────▶│   Receiver   │
│          │       │  (blind pipe)   │       │              │
│ AES-256  │       │ Cannot decrypt  │       │  AES-256     │
│ encrypt  │       │ Zero disk I/O   │       │  decrypt     │
└──────────┘       └─────────────────┘       └──────────────┘

The transfer token format is ID-PASSWORD-KEY:

Part Purpose Sent to server?
ID Identifies the session Yes
PASSWORD Authenticates both peers Yes
KEY E2EE secret for AES-256-CTR Never
  1. One peer creates a session and gets back ID + PASSWORD from the server
  2. It generates a random KEY locally and combines everything into a token
  3. The other peer connects using the ID and PASSWORD to authenticate
  4. Data is encrypted with AES-256-CTR(SHA-512(KEY)) — the server only sees ciphertext
  5. A SHA-256 checksum is compared at the end to verify integrity

The relay server is intentionally stateless. It never writes to disk, never logs file contents, and never sees the encryption key. You can verify this yourself — the entire server is a single Java file.


Why not just use croc?

croc is a great tool. If you already have it installed on both machines, use it.

But here's the thing — you often can't install it. And that's where Tubo was born:

The scenario: You're SSH'd into a production server. You need to pull a 5GB log file. The /tmp partition is mounted as noexec. You don't have root. Corporate policy actively blocks the execution of unknown binaries.

With croc, you are completely stuck. With Tubo:

curl -sL https://tubo.endlessite.com/run | sh -s receive <token>

No binary touches the disk. It uses curl and openssl — tools that are already there.

Tubo croc
Works without installing anything Yes (curl | sh fallback) No (Needs binary on both sides)
Works on noexec filesystems Yes (Shell script, no binaries) No (Needs to execute a binary)
Auditable in 10 minutes Yes (~1200 lines total) ~15,000 lines
Relay server complexity 1 file, ~475 lines Multi-file Go server
Protocol HTTPS + WebSocket TCP custom protocol
E2E Encryption Yes (AES-256-CTR) Yes (PAKE + AES)
Self-hostable Yes Yes
Directory transfer Yes Yes
Resumable transfers No (Planned) Yes
Multiple receivers No Yes

Tubo doesn't try to replace croc. Different use case — Tubo is for when you can't or don't want to install anything.


License

MIT — do whatever you want with it.