endless-ssh-rs-with-web
An SSH honeypot that traps scanners by slowly, but endlessly feeding them random data.
Inspired by endless-ssh, rewritten in Rust with a PostgreSQL/TimescaleDB backend and a React frontend.
Releases can be found here.
When an attacker connects to the SSH tarpit port, the server never completes the SSH handshake. Instead, it sends a slow trickle of random banner lines indefinitely, wasting the attacker's time and resources. All connections are logged with geolocation data (via MaxMind GeoLite2) and stored in a time-series database for visualization.
The web dashboard shows:
1. Start the database
docker compose up --detach
2. Build the frontend
pnpm run build
3. Build and run the backend
SQLX_OFFLINE=true cargo run --release --package endless-ssh-rs-with-web
The web dashboard is served on port 3000. The SSH honeypot listens on port 2223 by default.
| Flag | Default | Description |
|---|---|---|
-p, --port | 2223 | Honeypot listening port |
-d, --delay | 10000 | Delay between messages (ms) |
-l, --max-line-length | 32 | Max banner line length (3–255 bytes) |
-m, --max-clients | 64 | Max concurrent connections |
-4, --only_4 | — | Bind to IPv4 only |
-6, --only_6 | — | Bind to IPv6 only |
| Variable | Description |
|---|---|
DATABASE_URL | PostgreSQL connection string |
MAXMIND_LICENSE_KEY | MaxMind license key for GeoIP lookups (optional) |
RUST_LOG | Log level, e.g. INFO,endless-ssh-rs-with-web=TRACE |
Multi-stage Docker builds produce a minimal scratch-based image. Multi-platform images (amd64, arm64) can be built with:
./build-all.sh
pnpm run dev # Dev server with HMR
pnpm run build # Production build
Backend: Rust, Axum, Tokio, SQLx, PostgreSQL, TimescaleDB, MaxMind GeoLite2
Frontend: React 19, TypeScript, Vite, Tailwind CSS, MapLibre GL, Recharts
MIT, see LICENSE
SPDX-License-Identifier: MIT
Content type
Image
Digest
sha256:db894fad7…
Size
7.3 MB
Last updated
25 minutes ago
docker pull kristofmattei/endless-ssh-rs-with-web:edge