ncouture/MockSSH
GitHub: ncouture/MockSSH
一个基于 Python Twisted 的 SSH 服务器模拟框架,用于在没有真实服务器的情况下测试自动化任务和 SSH 客户端行为。
Stars: 130 | Forks: 25
# MockSSH
模拟 SSH 服务器及其支持的所有命令。
## 目的
开发此项目旨在模拟 SSH 服务器背后的操作系统,
以便在无法访问真实服务器的情况下测试任务自动化。
最终,Mock SSH 在 **version 2.0.0** 中得到了全面现代化升级,
要求 Python 3.12+ 并具有健壮的类型安全
架构以及现代化的测试和 linting (pytest, Ruff)。
它提供了一个线程版本,用于针对模拟的 SSH 服务
执行端到端单元测试。
## 安装
MockSSH 需要 Python 3.12+。它使用基于现代 `pyproject.toml` 的构建系统。
```
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
```
## 开发
该项目通过 `make` 提供了多个开发命令:
要安装开发依赖项 (Ruff, mypy, pytest, pre-commit):
```
pip install -e ".[dev]"
```
要运行 linter 和格式化代码 (使用 **Ruff**):
```
make fix
make lint
```
要运行静态类型检查 (使用 **mypy**):
```
make typecheck
```
要运行测试:
```
make test
```
要构建源码和 wheel 发行版:
```
make build
```
要安装 pre-commit 钩子:
```
pre-commit install
```
## 在 Python 中模拟 SSH
MockSSH 的目标是尽可能易于使用。
请参考 examples/ 目录中的 mock_cisco.py 和 mock_F5.py,
以获取有关如何使用它的概述。
## 在 LISP 中模拟 SSH
我们在简化 MockSSH 与 [HyLang](http://hylang.org/) 结合使用方面投入了大量精力。
因此,本项目发布了一个 DSL,
位于 *mocksshy/* 目录中。
使用 DSL 将允许您通过编写
更接近配置文件而不是程序的内容来模拟 SSH。
作为比较,以下是提供相同功能的模拟 SSH 服务器
实现的两种方法:
*Python*
```
import MockSSH
def passwd_change_protocol_prompt(instance):
instance.protocol.prompt = "hostname #"
instance.protocol.password_input = False
def passwd_write_password_to_transport(instance):
instance.writeln("MockSSH: password is %s" % instance.valid_password)
command_passwd = MockSSH.PromptingCommand(
name='passwd',
password='1234',
prompt="Password: ",
success_callbacks=[passwd_change_protocol_prompt],
failure_callbacks=[passwd_write_password_to_transport])
users = {'admin': '1234'}
commands = [command_passwd]
MockSSH.runServer(commands,
prompt="hostname>",
interface='127.0.0.1',
port=2222,
**users)
```
*HyLang*
```
(import MockSSH)
(require mocksshy.language)
(mock-ssh :users {"testuser" "1234"}
:host "127.0.0.1"
:port 2222
:prompt "hostname>"
:commands [
(command :name "passwd"
:type "prompt"
:output "Password: "
:required-input "1234"
:on-success ["prompt" "hostname#"]
:on-failure ["write" "Pass is 1234..."]))
```
## 使用 MockSSH 进行单元测试
如 tests/ 目录中的单元测试所示,可以使用
线程化的 MockSSH 服务器针对模拟的
SSH 服务执行端到端单元测试。
MockSSH 现在使用 **pytest** 和 **pytest-twisted** 来干净地管理 Twisted
reactor 生命周期。这使得整个测试套件可以在
单个进程中运行。
## 文档 (Wiki)
综合文档位于 `docs/wiki/` 目录中,
涵盖基础概念、架构、自定义命令定义
和测试策略。
## AI 驱动的自动化
MockSSH 已与 **Gemini CLI** 集成,以自动化日常开发任务:
* **自动化议题分类**:新议题会被自动分析和标记。
* **智能代码审查**:Pull Request 会收到来自 Gemini 的初步自动化审查。
* **自主实现**:已批准的计划可由 Gemini 执行以加速开发。
有关自动化工作流的更多详细信息,请参阅 `GEMINI.md`。
## 安全性
MockSSH 专为测试和模拟而设计。在实现自定义命令时:
* **避免敏感日志记录**:不要使用 `print()` 或 `log` 输出原始用户输入或密码。
* **主机密钥权限**:确保您的主机密钥 (位于 `generated-keys/` 中) 具有限制性权限 (`chmod 600`)。
* **机密管理**:不要将敏感凭证 (如 Service Account 密钥) 存储在仓库中。
## 许可证
MockSSH 在 **LGPL-3.0-or-later** 许可证下发布。
## 致谢
MockSSH 的灵感来源于 [kippo](https://github.com/desaster/kippo/) (一个 SSH 蜜罐) 以及 @HyLang
标签:F5, HyLang, Lisp, Mock, mypy, pyproject.toml, pytest, Python, Python 3.12, Ruff, SSH, Twisted, 任务自动化, 内核驱动, 单元测试, 命令模拟, 安全测试, 安全规则引擎, 思科, 攻击性安全, 无后门, 模拟服务器, 测试框架, 端到端测试, 类型安全, 网络协议, 网络设备模拟