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, 任务自动化, 内核驱动, 单元测试, 命令模拟, 安全测试, 安全规则引擎, 思科, 攻击性安全, 无后门, 模拟服务器, 测试框架, 端到端测试, 类型安全, 网络协议, 网络设备模拟