2026-07-13 21:10:34 +07:00
2026-07-13 18:07:57 +07:00
2026-07-13 21:10:24 +07:00
2026-07-13 17:58:48 +07:00
2026-07-13 17:58:48 +07:00
2026-07-13 21:10:34 +07:00
2026-07-13 17:58:48 +07:00
2026-07-13 21:10:24 +07:00
2026-07-13 17:58:48 +07:00
2026-07-13 17:58:48 +07:00
2026-07-13 17:58:48 +07:00
2023-02-11 22:27:19 +07:00
2026-07-13 21:10:24 +07:00

💀 TrollSSH

A fake SSH server that accepts any login and plays ASCII video at whoever connects to it

SSH Demo

Features

  • Accept any credentials
  • ASCII video playback - resized live to the client's terminal
  • Multiple frame sets - clients get a random one, arrow keys switch between them (configurable)
  • Honeypot extras - optional credential logging, per-IP and global connection limits, handshake timeout, customizable banner / fake login / goodbye text

Quick start

Generate a frame set from a video through container image

docker run --rm -v ./video.mp4:/home/app/video.mp4 -v ./frames:/home/app/frames \
    ghcr.io/yuzuzensai/trollssh:latest trollssh --generate --video video.mp4

This writes frames/<name>.tsf, a simple container of JPEG frames plus the source fps. You can drop as many .tsf files into frames/ as you like. The server will loads all of them.

Run the server with docker-compose.yaml

cp .env.example .env
docker compose up -d

./data persists host keys and text assets.

./frames holds the .tsf frame sets.

Then try it:

ssh anyone@localhost

Configuration

Configuration is via environment variables, loaded from a .env file if one exists (see .env.example for the full annotated list). Durations are in milliseconds.

Host keys (data/id_rsa, data/id_ed25519) are generated on first run and reused afterwards.

Customization

Optional text files in data/ (created next to the binary):

File Shown
data/banner.txt As the SSH banner, before authentication
data/fakelogin.txt Right after "login", before playback
data/goodbye.txt When the session ends after MAX_LOOP playthroughs

Development

Requirements: Go 1.25+ and ffmpeg / ffprobe on PATH (only for --generate).

go run ./src --generate --video video.mp4
go run ./src

Or build a binary:

go build -o trollssh ./src
./trollssh

License

See LICENSE

S
Description
👻 A fake SSH server that accepts any login and plays back video as colored ASCII/Unicode
Readme MIT
28 MiB
Languages
Go 99.6%
Dockerfile 0.4%