liubaicai/sshd-ai-honeypot
GitHub: liubaicai/sshd-ai-honeypot
一个由 AI 驱动的高交互 SSH 蜜罐,能够模拟真实 Linux 环境并智能响应未知命令,用于捕获和分析攻击行为。
Stars: 0 | Forks: 0
# 🍯 SSH AI Honeypot
**一个由 AI 驱动的高交互 SSH 蜜罐,用于捕获与分析真实攻击行为**
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org/)
[](https://platform.openai.com/)
[](https://www.docker.com/)
[](https://github.com/mscdex/ssh2)
[快速开始](#-快速开始) · [配置说明](#-配置说明) · [Docker 部署](#-docker-部署) · [日志设计](#-日志设计) · [命令模拟](#-命令与文件系统模拟)
中文 | **[English](README_EN.md)**
## ✨ 特性
| 特性 | 说明 |
|------|------|
| 🤖 **AI 驱动响应** | 接入 OpenAI / 任意兼容接口,对未知命令生成逼真的终端输出 |
| 🐚 **真实 SSH 交互** | 基于 `ssh2` 实现完整 SSH 协议,支持 shell / exec / sftp / scp |
| 🗂️ **会话隔离文件系统** | 每个 SSH 会话拥有独立虚拟目录树,攻击者之间完全隔离 |
| 📋 **结构化日志** | 全量 JSON 事件日志 + 单会话时间线,开箱即用 |
| 🔄 **自动降级** | AI 不可用时无缝切换为本地命令模拟,交互不中断 |
| ⚡ **响应缓存** | 相同请求命中 LRU 缓存,减少 AI API 调用延迟 |
| 🐳 **Docker 一键部署** | 内置 Ollama,本地大模型开箱即用 |
## 📐 架构概览
```
攻击者 SSH 客户端
│
▼
┌─────────────────────────────────────────────┐
│ SSH Server (server.js) │
│ 认证(全接受) · Shell · Exec · SFTP │
└──────────────┬──────────────────────────────┘
│
┌───────▼────────┐
│ Command Handler │ ← command-handler.js
│ (命令解析路由) │
└───┬──────┬─────┘
│ │
┌──────▼──┐ ┌▼──────────────┐
│ Builtin │ │ AI Service │ ← ai-service.js
│ 本地模拟 │ │ OpenAI SDK │
└──────┬──┘ └──────┬────────┘
│ │
┌──────▼────────────▼────┐
│ Virtual FileSystem │ ← filesystem.js
│ (会话独立目录树) │
└───────────┬────────────┘
│
┌──────▼──────┐
│ Logger │ ← logger.js
│ JSON · 轮转 │
└─────────────┘
```
## 🚀 快速开始
### 前置要求
- Node.js ≥ 18
- pnpm(推荐)或 npm
### 安装
```
# 克隆仓库
git clone https://github.com/your-username/sshd-ai-honeypot.git
cd sshd-ai-honeypot
# 安装依赖
pnpm install
# 复制配置文件
cp config.example.json config.json
```
### 配置 API Key
编辑 `config.json`,填入你的 AI 接口信息:
```
{
"ai": {
"host": "https://api.openai.com/v1",
"apiKey": "sk-xxxxxxxx",
"model": "gpt-4o-mini"
}
}
```
### 启动服务
```
# 生产模式
pnpm start
# 开发模式(热重载)
pnpm dev
```
### 测试连接
```
ssh test@127.0.0.1 -p 22
# 任意用户名 / 密码均可登录(蜜罐模式)
```
### 单文件打包部署(可选)
如需将源码与所有依赖打包为单个 JS 文件,方便拷贝到服务器部署:
```
# 构建(输出到 dist/bundle.js,约 1.7MB)
pnpm build
```
`config.example.json` 和 `vfs.template.json` 的内容已**内嵌**到 bundle 中作为默认值。
| 部署文件 | 是否必须 | 说明 |
|----------|----------|------|
| `dist/bundle.js` | ✅ 必须 | 含全部依赖和内嵌默认值 |
| `config.json` | 可选 | 存在时覆盖内嵌默认配置 |
| `vfs.template.json` | 可选 | 存在时覆盖内嵌默认文件系统模板 |
```
# 在目标服务器上直接运行(无需 node_modules)
node bundle.js
```
## ⚙️ 配置说明
配置文件位于 `config.json`(从 `config.example.json` 复制),各字段说明如下:
```
{
"ssh": {
"port": 22, // 监听端口
"host": "0.0.0.0" // 监听地址
},
"ai": {
"enabled": true, // 是否启用 AI
"pureMode": false, // true = 所有命令均走 AI(跳过本地模拟)
"host": "https://api.openai.com/v1", // OpenAI 或兼容接口地址
"apiKey": "sk-xxx", // API Key
"model": "gpt-4o-mini", // 模型名称
"maxTokens": 300, // 单次最大 token 数
"temperature": 0.3, // 生成温度
"timeoutMs": 30000, // 请求超时(毫秒)
"historyTurns": 12, // 携带的上下文轮数
"requestRetries": 2, // 失败重试次数
"retryDelayMs": 1200, // 重试间隔(毫秒)
"cacheEnabled": true, // 启用响应缓存
"cacheSize": 100 // 缓存条目上限
},
"logging": {
"level": "info", // 日志级别
"directory": "./logs", // 日志目录
"maxFiles": "30d", // 保留天数
"maxSize": "20m", // 单文件大小上限
"maxResponseLength": 2000, // 响应截断长度
"storePasswords": true // 是否记录攻击者密码
},
"vfs": {
"templateFile": "./vfs.template.json" // 虚拟文件系统模板
}
}
```
### 环境变量(优先级高于 config.json)
| 变量名 | 别名 | 说明 |
|--------|------|------|
| `HONEYPOT_AI_ENABLED` | `AI_ENABLED` | 是否启用 AI |
| `HONEYPOT_AI_PURE_MODE` | `AI_PURE_MODE` | 是否开启纯 AI 模式 |
| `HONEYPOT_AI_HOST` | `AI_HOST` | AI 接口地址 |
| `HONEYPOT_AI_API_KEY` | `AI_API_KEY` | API Key |
| `HONEYPOT_AI_MODEL` | `AI_MODEL` | 模型名称 |
## 🐳 Docker 部署
项目内置 Dockerfile,集成 [Ollama](https://ollama.com/) 本地大模型,**无需外部 API Key** 即可运行。
```
# 构建镜像(含模型预下载,约需几分钟)
docker build -t ssh-honeypot .
# 启动容器
docker run -d \
--name ssh-honeypot \
-p 2222:22 \
-v $(pwd)/logs:/app/logs \
ssh-honeypot
```
镜像默认使用 `Qwen2.5-1.5B` 量化模型,可通过 `OLLAMA_MODEL` 环境变量替换:
```
docker run -d -p 2222:22 \
-e OLLAMA_MODEL=qwen2.5:3b \
ssh-honeypot
```
健康检查:容器同时检测 Ollama(`:11434`)和 SSH(`:22`)就绪状态。
## 📊 日志设计
日志目录默认 `./logs`,按天自动轮转:
```
logs/
├── honeypot-YYYY-MM-DD.log # 全量事件(JSON 格式)
├── connections-YYYY-MM-DD.log # 连接生命周期事件
├── commands-YYYY-MM-DD.log # 交互事件(输入/命令/输出/AI)
└── sessions/
└── session-基础工具(点击展开)
`whoami` `id` `hostname` `date` `uptime` `uname` `echo` `printf` `history` `env` `groups` `which`文件系统(点击展开)
`pwd` `ls` `ll` `cd` `cat` `touch` `mkdir` `rm` `cp` `mv` `find` `head` `tail` `wc` `grep` `chmod` `chown`网络 & 系统(点击展开)
`ps` `top` `netstat` `ss` `ifconfig` `ip` `route` `ping` `nslookup` `dig` `traceroute` `df` `free` `mount` `dmesg` `iptables` `ufw` `who` `w` `last` `lsb_release` `lsblk` `lscpu` `hostnamectl` `timedatectl`服务 & 高级工具(点击展开)
`crontab` `journalctl` `service` `systemctl` `lsof` `ssh-keygen` `scp` `rsync` `nc` `netcat` `nmap` `nohup` `at` `atq` `useradd` `adduser` `usermod` `chattr` `docker` `docker-compose` `kubectl` `python` `python3` `node` `npm` `git` `sudo` `su` `passwd` `wget` `curl` `ssh` `apt`
如果这个项目对你有帮助,欢迎 ⭐ Star!
标签:AI风险缓解, AI驱动, Cybersecurity, deception, DLL 劫持, Docker, EDR绕过, GNU通用公共许可证, honeypot, HTTP工具, LLM, LLM评估, MITM代理, Node.js, Ollama, OpenAI, SSH协议, SSH蜜罐, Unmanaged PE, 会话隔离, 内存规避, 大语言模型, 威胁情报, 安全防御评估, 安全防护, 开发者工具, 攻击捕获, 无线安全, 网络信息收集, 网络安全, 网络安全审计, 自定义脚本, 自定义脚本, 虚拟文件系统, 蜜罐, 证书利用, 请求拦截, 进程注入, 隐私保护, 高交互蜜罐