🚀 极客实战:让 AI 拥有“手脚”,手搓 Python 脚本实现原生 SSH MCP Server!
💡 缘起:我想让 AI 接管我的局域网服务器
最近一直在用支持 MCP (Model Context Protocol) 协议的 AI 编辑器(比如 Antigravity、Cursor)。用过的人都知道,MCP 是个跨时代的神器,它能让大模型直接读取本地文件、查数据库。
但我有一个更硬核的需求:我的测试环境跑在局域网的一台 Ubuntu 服务器上(192.168.31.73),我能不能让编辑器里的 AI,直接通过 SSH 连上去帮我敲 Linux 命令、查 Docker 日志?
翻遍了官方的内置 MCP Server 列表,发现全是大厂云服务的插件,并没有一个原生的、通用的 SSH MCP。
面对网上良莠不齐、可能存在安全隐患的第三方 NPM 包,作为一名有代码洁癖的程序员,我做了一个违背祖宗的决定:不用第三方包,我自己用 Python 手搓一个!
🛠️ 第一战:搭建纯净的 Python 虚拟环境 (避坑指南)
在 Mac 上跑 Python 脚本,切忌直接污染全局环境,否则容易引发版本冲突。 下面是标准的环境隔离操作(包含我踩坑后修正的绝对路径玩法):
1. 创建并激活虚拟环境
# 进入我的工作区
cd /Users/dgq/Documents/admin
# 创建专属的 MCP 目录
mkdir mcp-ssh-server
cd mcp-ssh-server
# 创建并激活 venv
python3 -m venv venv
source venv/bin/activate
(此时终端提示符前出现 (venv),说明你已经进入了安全沙盒。)
2. 安装核心依赖
只需要两个库:官方的 mcp 协议包和老牌 SSH 库 paramiko。
(venv) pip install mcp paramiko
3. 获取 Python 的绝对路径 (后续挂载极其重要!)
很多新手挂载 MCP 失败,都是因为路径不对。一定要在虚拟环境中执行 which python 获取绝对路径:
(venv) which python
# 输出结果:/Users/dgq/Documents/admin/mcp-ssh-server/venv/bin/python
把这个路径记下来,等会儿要用!
💻 第二战:30 行代码,手搓 SSH Server
在 mcp-ssh-server 目录下新建 ssh_server.py。 这份代码的核心逻辑非常清晰:定义工具 -> 接收 AI 传来的 JSON 指令 -> 利用本地的 SSH 免密密钥连接服务器 -> 执行命令并返回结果。
⚠️ 前置条件:确保你的 Mac 已经配置了到目标服务器的 SSH 免密登录 (ssh-copy-id),因为这个后台进程是无法弹出密码输入框的。
import asyncio
import paramiko
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent
# ================= 配置区(极简配置) =================
SSH_HOST =

