YuzuZensai/TrollSSH
GitHub: YuzuZensai/TrollSSH
一个伪 SSH 服务器,接受任意登录并在终端中播放彩色 ASCII 字符画视频,附带可选的蜜罐功能。
Stars: 3 | Forks: 0
# 👻 TrollSSH
一个虚假的 SSH 服务器,接受任何登录请求,并向连接到它的客户端播放彩色
ASCII/Unicode 字符画视频

## 功能
- **接受任何凭据**
- **彩色 ASCII/Unicode 视频播放** - 实时缩放以适应客户端的
终端,使用可配置的字符灰度,默认使用 Unicode 块字符预设
- **自动颜色检测** - 根据连接客户端报告的支持情况,渲染 24-bit 真彩色、256 色或
普通灰度
- **多种帧集** - 客户端会随机获取一个,方向键可在它们之间切换
(可配置)
- **蜜罐附加功能** - 可选的凭据记录、基于 IP 和全局的
连接限制、握手超时、可自定义的 banner / 虚假登录 /
告别文本
## 快速开始
通过容器镜像从视频生成帧集
```
docker run --rm -v ./video.mp4:/home/app/video.mp4 -v ./frames:/home/app/frames \
ghcr.io/yuzuzensai/trollssh:1.2.0 trollssh --generate --video video.mp4 --resolution 512
```
这会生成 `frames/.tsf`,这是一个简单的容器,包含彩色 JPEG 帧以及
源 fps。您可以根据需要在 `frames/` 目录中放入任意数量的 `.tsf` 文件。
服务器会加载所有这些文件。
使用 [`docker-compose.yaml`](docker-compose.yaml) 运行服务器
```
cp .env.example .env
docker compose up -d
```
`./data` 用于持久化主机密钥和文本资产。
`./frames` 用于存放 `.tsf` 帧集。
然后尝试一下:
```
ssh anyone@localhost
```
## 配置
服务器配置通过环境变量进行,如果存在 `.env` 文件则会从中加载
(有关完整的注释
列表,请参见 [`.env.example`](.env.example))。持续时间以毫秒为单位。
主机密钥(`data/id_rsa`, `data/id_ed25519`)在首次运行时生成,并在
之后重复使用。
帧生成通过标志进行配置:
| 标志 | 默认值 | 描述 |
| -------------------- | ------- | -------------------------------------------------- |
| `--generate`, `-g` | | 生成 `.tsf` 帧集而不是提供服务 |
| `--video`, `-v` | | 源视频路径 |
| `--resolution`, `-r` | `512` | 存储帧的最大像素尺寸。值越高 = 画面越清晰,但 `.tsf` 文件越大且渲染越慢 |
## 自定义
`data/` 目录中的可选文本文件(在二进制文件旁边创建):
| 文件 | 显示时机 |
| -------------------- | --------------------------------------------------- |
| `data/banner.txt` | 作为 SSH banner,在身份验证之前 |
| `data/fakelogin.txt` | 紧接在 "login" 之后,在播放之前 |
| `data/goodbye.txt` | 在 `MAX_LOOP` 次播放后会话结束时 |
## 开发
要求:Go 1.25+ 以及 `PATH` 中的 `ffmpeg` / `ffprobe`(仅用于
`--generate`)。
入口点位于 [`cmd/trollssh`](cmd/trollssh);它所组装的包位于
[`internal/`](internal)(`config`、`logx`、`render`、`tsf`、
`sshserver`)。
```
go run ./cmd/trollssh --generate --video video.mp4 --resolution 512
go run ./cmd/trollssh
```
或者构建一个二进制文件:
```
go build -o trollssh ./cmd/trollssh
./trollssh
```
CI 在每次推送时运行以下检查:
```
gofmt -l . # format
go vet ./... # vet
golangci-lint run ./... # lint, see https://golangci-lint.run
go test ./... # tests
```
要在每次提交前自动运行它们,请安装
[lefthook](https://github.com/evilmartians/lefthook) 和 `golangci-lint`,然后执行:
```
lefthook install
```
## 许可证
[MIT](LICENSE)
标签:ASCII艺术, EVTX分析, PB级数据处理, SSH服务, 安全运维, 日志审计, 蜜罐, 视频处理, 证书利用, 请求拦截