swagSSH 1.1.0 — file transfers, exec, custom IDs, resilience
What's new
📦 File transfers (scp-like)
swagssh send <id> <file-or-dir>— push files and whole directories (streamed tar) to the machine behind NATswagssh recv <id> <path>— pull files and directories back- Progress display, delivery confirmation, path-traversal protection on the receiving side
⚡ exec
swagssh exec <id> <command>— run a one-shot command on the remote machine, stream output, mirror the exit code
🏷 Custom session IDs with TTL
swagssh share --id my-laptop --ttl 30m— a memorable ID with a bounded lifetime (1m..24h)- TTL is enforced across reconnects (not renewed)
🛡 Security
- TOFU host key verification: the relay's host key is pinned on first use; any change aborts the connection with a MITM warning
- Handshake timeout, per-IP connection limits, session caps, session ID validation
- Panic recovery per connection, graceful shutdown on SIGTERM
🔁 Resilience
- Auto-reconnect: the share side re-establishes the relay connection with the same session ID; the local shell survives network drops
- Keepalives on both ends, dial retries with exponential backoff
- Half-close relay semantics so transfer confirmations survive a finished upload
🐛 Fixes
- Terminal resize (window-change) was sent as a global request and silently dropped — now a proper channel request
Install
iwr -useb https://ssh.swag.best/install.ps1 | iexcurl -fsSL https://ssh.swag.best/install.sh | bashBinaries for Linux/macOS/Windows (amd64, arm64, 386) are attached below. The relay server binary is swagssh-server-linux-amd64.
🤖 Generated with Claude Code