一个基于模型上下文协议(MCP)的服务器,提供高级基于SSH的Linux服务器管理功能,包括全面的命令日志记录和审计跟踪。
此MCP服务器使AI助手(如Claude)能够通过SSH连接到远程Linux服务器,诊断问题,执行命令并执行管理任务,同时维护所有操作的完整审计日志。它专为希望利用AI进行服务器管理的系统管理员设计,同时通过全面的日志记录来确保安全性和合规性。
ssh_connect_test - 测试SSH连接并获取基本系统信息ssh_execute - 在远程服务器上执行任何命令并捕获完整的输出ssh_diagnose_system - 运行综合系统诊断ssh_check_service - 检查特定服务的状态和日志ssh_manage_service - 启动、停止、重启、启用或禁用服务ssh_analyze_logs - 分析并搜索日志文件ssh_network_diagnostics - 运行网络诊断和连通性测试ssh_install_package - 使用适当的包管理器安装包ssh_check_security - 执行安全审计view_command_logs - 查看已执行命令的审计日志get_log_status - 获取当前日志配置和统计信息docker mcp 命令)git clone https://github.com/Cosmicjedi/linux-administration-mcp.git
cd linux-administration-mcp
docker build -t linux-admin-mcp-server .
# 如果不存在,则创建目录
mkdir -p ~/.docker/mcp/catalogs
# 创建custom.yaml
cat > ~/.docker/mcp/catalogs/custom.yaml << 'EOF'
version: 2
name: custom
displayName: 自定义MCP服务器
registry:
linux-admin:
description: "具有审计日志记录的高级基于SSH的Linux服务器管理"
title: "Linux管理"
type: server
dateAdded: "2025-01-01T00:00:00Z"
image: linux-admin-mcp-server:latest
ref: ""
readme: ""
toolsUrl: ""
source: ""
upstream: ""
icon: ""
tools:
- name: ssh_connect_test
- name: ssh_execute
- name: ssh_diagnose_system
- name: ssh_check_service
- name: ssh_manage_service
- name: ssh_analyze_logs
- name: ssh_network_diagnostics
- name: ssh_install_package
- name: ssh_check_security
- name: view_command_logs
- name: get_log_status
environment:
- name: LOG_DIR
value: "/mnt/logs"
required: false
description: "存储审计日志的目录(可选,默认为/tmp/linux-admin-logs)"
volumes:
- host: "C:\\logs:/mnt/logs"
metadata:
category: 监控
tags:
- linux
- ssh
- 管理
- 监控
- 安全
- 审计
license: MIT
owner: local
EOF
# 编辑注册表文件以添加服务器
cat >> ~/.docker/mcp/registry.yaml << 'EOF'
linux-admin:
ref: ""
EOF
找到你的Claude Desktop配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json编辑文件以添加自定义目录:
{
"mcpServers": {
"mcp-toolkit-gateway": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "/var/run/docker.sock:/var/run/docker.sock",
"-v", "C:\\Users\\YourUsername\\.docker\\mcp:/mcp",
"-v", "C:\\logs:/mnt/logs",
"docker/mcp-gateway",
"--catalog=/mcp/catalogs/docker-mcp.yaml",
"--catalog=/mcp/catalogs/custom.yaml",
"--config=/mcp/config.yaml",
"--registry=/mcp/registry.yaml",
"--tools-config=/mcp/tools.yaml",
"--transport=stdio"
]
}
}
}
{
"mcpServers": {
"mcp-toolkit-gateway": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "/var/run/docker.sock:/var/run/docker.sock",
"-v", "/Users/YourUsername/.docker/mcp:/mcp",
"-v", "/var/log/linux-admin:/mnt/logs",
"docker/mcp-gateway",
"--catalog=/mcp/catalogs/docker-mcp.yaml",
"--catalog=/mcp/catalogs/custom.yaml",
"--config=/mcp/config.yaml",
"--registry=/mcp/registry.yaml",
"--tools-config=/mcp/tools.yaml",
"--transport=stdio"
]
}
}
}
配置说明:
-v YOUR_HOST_PATH:/mnt/logs 是可选但推荐的持久日志/tmp/linux-admin-logsYourUsername 替换为您的实际用户名选择并创建您首选的日志目录:
# 选项1:使用C:\logs
mkdir C:\logs
# 选项2:使用用户特定目录
mkdir C:\Users\%USERNAME%\Documents\LinuxAdminLogs
# 选项1:使用系统日志目录(需要sudo)
sudo mkdir -p /var/log/linux-admin
sudo chmod 755 /var/log/linux-admin
# 选项2:使用家目录
mkdir -p ~/linux-admin-logs
该服务器支持多种认证方法,凭据在运行时提供:
直接在工具调用中传递密码:
"使用用户名admin和密码mypassword连接到server.example.com"
在工具调用中指定密钥路径:
"使用位于/path/to/key的密钥连接到server.example.com"
如果没有提供凭据,服务器将尝试使用:
设计为与外部密钥管理系统集成。您的应用程序可以:
MCP服务器按照以下结构组织日志:
hostname-MMDDYYYY.json(例如,webserver-01012025.json)/tmp/linux-admin-logs)production-server-01152025.json - 2025年1月15日在生产服务器上运行的命令database_local-01152025.json - 2025年1月15日在database.local上运行的命令192_168_1_100-01152025.json - 2025年1月15日在IP 192.168.1.100上运行的命令注意:主机名中的特殊字符被替换为下划线以兼容文件系统。
在Claude Desktop中,您可以使用自然语言命令:
"测试到服务器192.168.1.100的SSH连接,用户名为admin,密码为secret123"
"作为root使用我的SSH密钥(位于/home/user/.ssh/web_key)连接到webserver.example.com并检查其是否正常运行"
"使用密码认证对10.0.0.5上的数据库服务器进行全面诊断"
"检查生产服务器上的nginx服务状态(使用admin账户和密码)"
"使用root账户重启database.local上的MySQL"
"停止并禁用web-server-01上的Apache"
"在server1.example.com上安装htop(以admin身份连接)"
"使用sudo用户在ubuntu-server.local上安装docker"
"检查我面向公众的服务器上的安全问题(使用密钥认证)"
"显示auth-server上的失败登录尝试"
"列出prod-server上具有sudo访问权限的所有用户"
"查找webserver上的Apache日志中的错误"
"在db-server上的系统日志中搜索'connection refused'"
"显示nginx错误日志的最后100行"
"测试从web-server到database-server的连通性"
"检查api.example.com上的端口443是否打开"
"从server1到google.com运行traceroute"
"显示在生产服务器上执行的所有命令"
"昨天在任何服务器上运行了哪些命令?"
"显示webserver在过去一周内失败的命令"
"获取当前日志状态"
Claude Desktop
↓
MCP网关(Docker)
↓
Linux管理MCP服务器(容器)
↓
SSH(带运行时凭证)
↓
远程Linux服务器
↓
审计日志(JSON)→ 您配置的目录
├── server1-01152025.json
├── server2-01152025.json
└── server3-01162025.json
日志存储在JSON Lines格式中(每行一个JSON对象):
{
"timestamp": "2025-01-15T12:00:00Z",
"hostname": "server.example.com",
"user": "admin",
"command": "systemctl restart nginx",
"output": "...",
"error": "",
"success": true
}
docker imagescat ~/.docker/mcp/catalogs/custom.yamldocker logs [container_id]get_log_status工具检查配置object NoneType can't be used in 'await' expression,请重建Docker镜像linux_admin_server.py@mcp.tool()装饰器的新函数# 直接运行服务器,可选日志目录
export LOG_DIR="/tmp/test-logs" # 可选
python linux_admin_server.py
# 测试MCP协议
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | python linux_admin_server.py
| 变量 | 必需 | 默认值 | 描述 |
|---|---|---|---|
LOG_DIR | 否 | /tmp/linux-admin-logs | 存储审计日志的目录路径 |
SSH_KEY_PATH | 否 | 无 | 可选默认SSH私钥路径 |
SSH_KNOWN_HOSTS | 否 | 无 | 可选已知主机文件路径 |
SSH_CONFIG_PATH | 否 | 无 | 可选SSH配置文件路径 |
欢迎贡献!请:
MIT许可证 - 详情见LICENSE文件
对于问题、疑问或建议:
/tmp/linux-admin-logs