Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
SSH Model Context Protocol Server - Enable SSH functionality for AI models
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
SSH_HOST, SSH_USER, SSH_PASSWORD, SSH_PORT「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"ssh-licco": {
"command": "uvx",
"args": [
"ssh-licco"
],
"env": {
"SSH_HOST": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_PORT": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add ssh-licco --env SSH_HOST=your-value --env SSH_USER=your-value --env SSH_PASSWORD=your-value --env SSH_PORT=your-value -- uvx ssh-licco動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"ssh-licco": {
"command": "uvx",
"args": [
"ssh-licco"
],
"env": {
"SSH_HOST": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_PORT": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"ssh-licco": {
"type": "stdio",
"command": "uvx",
"args": [
"ssh-licco"
],
"env": {
"SSH_HOST": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_PORT": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
SSH_PORT envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント Echoqili で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:SSH_HOST, SSH_USER, SSH_PASSWORD
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(2.7.3)がレジストリに届いたのは26 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, FOGA node
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
A Finch OG Agent cell as an MCP server: read the world, dry-run and take ERC-8414 tenders by policy.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
让 AI 帮你操作服务器! 通过自然语言对话,AI 可以帮你执行命令、管理文件、查看日志、部署应用等。
ssh_file_transfer delete 自动识别 Windows / Unix 路径风格并拦截敏感路径与路径遍历SSH-LICCO 基于标准 SSH/SFTP 协议,可连接以下目标主机:
| 操作系统 | 要求 | 备注 |
|---|---|---|
| Linux | OpenSSH 7.0+ | 推荐,完整支持所有功能 |
| Windows Server | OpenSSH for Windows / PowerShell Remoting over SSH | v2.1.3+ 支持 Windows 路径风格与安全校验 |
| macOS | 系统内置 OpenSSH | 完整支持 |
提示:连接 Windows 服务器时,请使用 Windows 风格路径(如
C:\temp\file.txt),系统会自动识别并进行路径安全校验。
pip install ssh-licco
git clone https://github.com/Echoqili/ssh-licco.git
cd ssh-licco pip install -e .
Python 版本要求: Python 3.10+
打开设置 → MCP → 添加新服务器:
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server" } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_HOST": "192.168.1.100", "SSH_USER": "root", "SSH_PASSWORD": "your_password", "SSH_PORT": "22", "SSH_TIMEOUT": "60", "SSH_KEEPALIVE_INTERVAL": "30", "SSH_SESSION_TIMEOUT": "7200", "SSH_CLIENT_TYPE": "common" } } } }
环境变量说明:
SSH_HOST: SSH 服务器地址SSH_USER: 用户名SSH_PASSWORD: 密码SSH_PORT: 端口(默认 22)SSH_TIMEOUT: 连接超时(秒)SSH_KEEPALIVE_INTERVAL: 保活间隔(秒)SSH_SESSION_TIMEOUT: 会话超时(秒)SSH_CLIENT_TYPE: SSH 客户端类型(可选,默认 common)common - paramiko(稳定可靠,推荐)⭐performance - asyncssh(高性能,适合高并发)🚀development - fabric(简化 API,适合快速开发)👨💻新增加固默认值与迁移说明见 [安全边界与加固配置](docs/SECURITY.md): 连接默认验证主机密钥,确认参数不再绕过命令策略,文件传输执行目录隔离。 下表是项目的模式说明,不是第三方平台的安全评分。
重要:从 v0.2.1 开始,ssh-licco 提供多级安全策略,可根据使用场景灵活配置。
| 级别 | 名称 | 适用场景 | 防护强度 |
|---|---|---|---|
| STRICT | 严格模式 | 生产环境、公共服务器 | 最高 ⭐⭐⭐ |
| BALANCED | 平衡模式 | 开发环境、个人服务器(默认) | 高 ⭐⭐ |
| RELAXED | 宽松模式 | 测试环境、完全信任的服务器 | 中等 ⭐ |
Windows PowerShell:
$env:SSH_SECURITY_LEVEL = "balanced"
$env:SSH_EXTRA_ALLOWED_COMMANDS = "git,pip,npm"
Linux/Mac:
export SSH_SECURITY_LEVEL="balanced"
export SSH_EXTRA_ALLOWED_COMMANDS="git,pip,npm"
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "git,pip,npm", "SSH_BASE_DIR": "/home" } } } }
为防止任何误操作或越权调用直接打到远程 shell,ssh-licco 在所有安全级别下都无条件拦截以下灾难性命令模式,无法通过 `confirm_dangerous=true`、`confirmation_layer=N`、调整 `SSH_SECURITY_LEVEL` 等任何方式绕过:
rm -rf 作用于绝对路径(含 /、/*、/path、/path/*,-fr 变体同效)mkfs.* 任意文件系统格式化dd if=/dev/(zero|random|urandom) of=/dev/(sd|nvme) 覆写裸盘:(){ :|:& };: 及空白变体)chmod -R 777 / / chmod -R 000 / 根目录递归改权限> /dev/(sd|nvme) / >> /dev/(sd|nvme) 裸设备重定向如确需执行上述操作,请直接通过 SSH 登录服务器(绕过 MCP 网关)进行。安全且可逆的替代方案:
# 旧做法(v2.2.0 之前):rm -rf /path/to/junk ← 现已被硬拦截
mv /path/to/junk /tmp/.trash_$(date +%s)/
命中硬拦截时会输出 WARNING 审计日志(含 category 与命令),便于 SOC 监控。
| 工具 | 描述 | 核心能力 |
|---|---|---|
ssh_connect | 连接管理 | 自动读取环境变量/配置,支持密码+密钥认证,可保存配置,登录后自动执行命令 |
ssh_execute | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.2.0 起对灾难性命令(rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb 等)做无条件硬拦截 |
ssh_disconnect | 会话管理 | 断开指定会话 OR 列出所有活跃会话 |
ssh_file_transfer | 文件传输 | 上传/下载/列表/写入/追加/删除/创建目录/查看元信息(8 种操作);v2.1.3+ delete 操作新增 Windows/Unix 敏感路径拦截与路径遍历防护 |
ssh_host | 主机管理 | action=list/add/remove 增删查主机配置 |
ssh_docker | Docker 管理 | action=ps/images/build/logs 全生命周期管理 |
ssh_generate_key | 密钥生成 | RSA / Ed25519 密钥对 |
ssh_session | screen/tmux 会话 | 持久化远程会话管理(create/send/capture/list/kill),SSH 断开后进程依然存活 |
ssh_process | 进程管理 | 启动/停止/查询远程进程,SSH 端口转发(tunnel_open/tunnel_close/tunnel_list) |
关于 v2.1.0 引入的 3 个审批工具(
ssh_request_approval/ssh_approve_command/ssh_list_approvals):已从 MCPlist_tools()移除,代码已在 v2.2.0 删除(ssh_mcp/approval.py、ssh_mcp/handlers/approval.py)。审批流程依赖 AI 自报命令、运维侧背书,存在闭环风险;v2.2.0 的硬拦截更直接——灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。
用户:帮我查看服务器上的 Docker 容器
AI:调用 ssh_connect → ssh_execute "docker ps"
[执行结果] CONTAINER ID IMAGE COMMAND STATUS PORTS abc123 nginx "nginx" Up 2 days 80:80
用户:把这个文件上传到 /var/www/html
AI:调用 ssh_connect → ssh_file_transfer
[上传成功] 本地:./index.html 远程:/var/www/html/index.html 大小:2.3 KB
用户:帮我构建 Docker 镜像
AI:调用 ssh_execute(background=True) 后台执行 docker build...
[后台任务已启动] Session ID: a1b2c3d4 命令:docker build -t myapp . 使用 ssh_execute(session_id="a1b2c3d4", command="cat /tmp/build.log") 查看进度
用户:检查 PostgreSQL 是否正常运行
AI:调用 ssh_execute "pg_isready -h localhost -p 5432"
[检查结果] localhost:5432 - accepting connections ✅ PostgreSQL 运行正常
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "git,npm,docker,composer,pm2", "SSH_BASE_DIR": "/var/www", "SSH_HOST": "192.168.1.100", "SSH_USER": "deploy", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "pip,poetry,python3,pytest,black", "SSH_HOST": "192.168.1.100", "SSH_USER": "developer", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "psql,mysql,mongosh,pg_isready", "SSH_HOST": "192.168.1.100", "SSH_USER": "dbadmin", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "relaxed", "SSH_EXTRA_ALLOWED_COMMANDS": "sudo,apt,yum,systemctl,journalctl,docker,kubectl", "SSH_HOST": "192.168.1.100", "SSH_USER": "root", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "strict", "SSH_HOST": "192.168.1.100", "SSH_USER": "app-user", "SSH_PASSWORD": "your-password", "SSH_BASE_DIR": "/home/app-user" } } } }
下表所有变量均被代码读取。注意:
-
SSH_RATE_LIMIT是 bool 总开关(true/false),SSH_RATE_LIMIT_MAX才是次数上限,两者分开配置
- 主机密钥检查(strict_host_key_checking)不通过 env 配置,请用
ssh_connect工具参数或hosts.json
| 分类 | 变量 | 默认 | 说明 |
|---|---|---|---|
| 安全 | SSH_SECURITY_LEVEL | balanced | 安全级别:strict / balanced / relaxed |
SSH_BASE_DIR | /home | Unix 远程 SFTP 路径校验基目录 | |
SSH_LOCAL_BASE_DIR | 当前工作目录 | 本地文件上传源与下载目标的允许目录 | |
SSH_EXTRA_ALLOWED_COMMANDS | (空) | 额外允许的命令(逗号分隔) | |
SSH_ALLOWED_COMMANDS_FILE | (空) | 命令白名单 JSON 文件路径 | |
SSH_AUDIT_LOG_PATH | (空) | 审计日志文件路径 | |
| 限流 | SSH_RATE_LIMIT | true | 限流总开关(bool) |
SSH_RATE_LIMIT_MAX | 30 | 限流次数上限 | |
SSH_RATE_LIMIT_WINDOW | 60 | 限流窗口(秒) | |
| 硬拦截 | *(无 env)* | — | 灾难性命令硬拦截,零配置零绕过 |
| 连接默认 | SSH_HOST / SSH_PORT / SSH_USER / SSH_PASSWORD | 127.0.0.1 / 22 / root / (空) | 单 host 模式默认连接参数 |
SSH_TIMEOUT | 60 | 连接超时(秒) | |
SSH_KEEPALIVE_INTERVAL | 30 | keepalive 间隔(秒) | |
SSH_SESSION_TIMEOUT | 7200 | 会话超时(秒) | |
SSH_CLIENT_TYPE | paramiko | SSH 客户端实现:paramiko / asyncssh | |
SSH_FORCE_ENV_CONFIG | false | 强制 env 配置覆盖 hosts.json | |
SSH_SUDO_PASSWORD | (空) | sudo 密码,配合 use_sudo=true 走 sudo -S |
以下依赖版本冲突已在测试环境中验证,不影响 ssh-licco 的正常使用:
fastapi 需要 starlette<0.51.0
但安装了 starlette 0.52.1
影响范围:
解决方案:
pip install starlette==0.50.0
pyopenssl 需要 cryptography<45
但安装了 cryptography 46.0.5
影响范围:
解决方案:
pip install cryptography==44.0.0
测试通过的配置:
测试场景:
ssh-licco 的核心依赖是:
mcp - MCP 协议实现asyncssh - SSH 客户端paramiko - SSH 客户端(稳冒頭だけを表示しています。続きはリポジトリで読めます