我的mcp ssh
 
一种基于模型上下文协议(MCP)的SSH连接工具,允许大型语言模型通过SSH安全地连接到远程服务器,并通过MCP协议执行文件操作。
特性
- SSH连接管理:连接到远程SSH服务器
- 命令执行:在远程服务器上执行命令
- 文件传输:上传和下载文件
- 会话管理:维护和关闭SSH会话
安装
依赖项
- Python>=3.12
- uv包管理器
# Clone the project
git clone https://github.com/ffpy/my-mcp-ssh.git
# Enter the project directory
cd my-mcp-ssh
# Install dependencies
uv sync用法
在客户端配置
{
"mcpServers": {
"my-mcp-ssh": {
"command": "uv",
"args": [
"--directory",
"/my-mcp-ssh",
"run",
"src/main.py"
],
"env": {}
}
}
}环境变量
SSH连接默认值(可选)
环境变量为SSH连接提供默认值,在频繁连接到同一服务器或自动化环境时非常有用:
SSH_HOST:SSH服务器主机名或IP地址SSH_PORT:SSH服务器端口SSH_USERNAME:SSH用户名SSH_PASSWORD:SSH密码(如果使用密码身份验证)SSH_KEY_PATH:SSH私钥文件路径(如果使用密钥身份验证)SSH_KEY_PASSPHRASE:SSH私钥密码(如果需要)
何时使用SSH环境变量:
- 重复连接:多次连接到同一服务器时
- CI/CD管道:用于自动部署脚本
- 开发环境:为常用服务器设置默认值
- 容器部署:配置默认值而不修改代码
备注:传递给的参数 connect 该工具始终覆盖环境变量。
服务器配置
可以配置其他服务器行为:
SESSION_TIMEOUT:会话超时时间(分钟),默认值为30分钟MAX_OUTPUT_LENGTH:最大命令输出长度(字符),默认值为5000个字符
SSH凭据文件
为了提高安全性,您可以将SSH凭据存储在本地配置文件中,而不是将密码作为参数传递。
- 复制示例文件:
cp ssh-credentials.json.example ssh-credentials.json- 编辑
ssh-credentials.json使用您的实际凭据:
{
"root@192.168.1.100": "your_password",
"admin@web-[0-9].example.com": "web_password",
"deploy@server-{dev,test,staging}.company.com": "deploy_password",
"admin@*.internal.network": "internal_password"
}支持的模式:
*-匹配任何字符?-匹配单个字符[0-9]-匹配任何数字{dev,test,staging}-匹配列出的任何选项
身份验证优先级顺序:
- 传递给连接工具的参数(
password,key_path) - 凭据文件中的完全匹配(
username@host) - 凭据文件中的模式匹配(通配符)
- 环境变量密码(
SSH_PASSWORD) - 环境变量键(
SSH_KEY_PATH) - 默认SSH密钥(
~/.ssh/id_rsa如果存在)
安全:
- 文件权限自动设置为600(仅限所有者读/写)
- 该文件被添加到.gitignore中以防止意外提交
注:
- 凭证文件更改无需重新启动服务器即可立即生效
- 每次尝试连接时都会重新读取文件
刀具清单
连接
连接到SSH服务器
参数:
host:SSH服务器主机名或IP地址(可选)port:SSH服务器端口(可选,默认22)username:SSH用户名(可选)password:用于身份验证的SSH密码(可选)key_path:用于身份验证的SSH私钥文件路径(可选)key_passphrase:SSH私钥密码(如果需要)(可选)
断开
断开与SSH会话的连接
参数:
session_id:要断开连接的会话ID
list_sessions
列出所有活动的SSH会话
参数:
- 无
执行
在SSH服务器上执行命令
参数:
session_id:会话IDcommand:要执行的命令stdin:输入要提供给命令的字符串,默认值为空timeout:命令超时(秒),默认值为60秒
上传
将文件上传到SSH服务器
参数:
session_id:会话IDlocal_path:本地文件路径remote_path:远程文件路径
下载
从SSH服务器下载文件
参数:
session_id:会话IDremote_path:远程文件路径local_path:本地文件路径
调试
跑 ./inspector.sh 用于在线调试
许可证
我的mcp-ssh是根据Apache许可证2.0版获得许可的
