一个通过tmux实现AI代理完全交互式SSH会话并执行命令(如同人类操作员)的MCP(模型上下文协议)服务器。
tmux -V)
brew install tmux,Linux上使用apt install tmux / yum install tmux / pacman -S tmux对于最终用户(仅想使用MCP服务器):
# 克隆仓库
git clone https://github.com/yourusername/mcp-ssh-interactive.git
cd mcp-ssh-interactive
# 使用pip安装
pip install .
或者使用pipx创建隔离环境(推荐):
# 使用pipx安装
pipx install .
对于开发者(正在编写代码):
# 克隆仓库
git clone https://github.com/yourusername/mcp-ssh-interactive.git
cd mcp-ssh-interactive
# 在可编辑模式下安装
pip install -e .
注意:此包尚未发布到PyPI,因此需要从源码安装。
创建~/.mcp-ssh-interactive/config.yml文件,包含您的SSH目标:
connections:
my-server:
host: 192.168.1.100
user: username
key_path: ~/.ssh/id_rsa
port: 22
description: 我的远程服务器
info_file: my-server.md # 可选:指向特定于服务器信息文件的路径
prod-db:
host: db.example.com
user: deploy
key_path: ~/.ssh/id_ed25519
port: 22
description: 生产数据库主机(只读)
test-server:
host: test.example.com
user: demo
password: mypassword
port: 22
description: 使用密码认证的测试服务器
注意事项:
key_path或password用于身份验证key_path以提高安全性key_path,必须存在且可读;典型权限chmod 600~/.mcp-ssh-interactive/config.yml;如果缺失或无效,服务器将以明确错误退出info_file(可选):指向包含特定于服务器指令和信息的markdown文件的路径。支持:
my-server.md)- 相对于~/.mcp-ssh-interactive/info/解析~开头的绝对路径(例如,~/custom/path/server.md)/开头的绝对路径(例如,/tmp/server.md)注意:必须至少提供key_path或password之一。强烈建议使用key_path以提高安全性。
您可以通过创建markdown文件并在配置中引用它们来为每个服务器提供特定的指令、命令和重要信息。这使AI代理能够使用与特定环境相关的特定工具、方法和工作流程与服务器交互。您还可以在这些文件中记录常规任务和程序,使AI代理能够快速理解服务器的独特要求,并根据用户请求成功执行任务。
示例:
当为服务器定义了info_file时,用户可以简单地提到诸如“重启应用程序”或“部署最新版本”的任务,而AI代理将确切知道要执行哪些命令以及遵循哪些程序。
~/.mcp-ssh-interactive/info/prod-web-server.md创建一个markdown文件:# 生产Web服务器
## 认证与访问
- 根访问:`sudo su -`(密码:`prod_admin_2024`)
- 应用程序用户:`sudo -u webapp bash`(所有应用命令所需)
## 密钥路径
- 应用程序:`/opt/webapp/current`
- 配置:`/opt/webapp/config/production.yml`
- 日志:`/var/log/webapp/`
## 常见任务
### 重启应用程序
sudo systemctl restart webapp
### 部署新版本
cd /opt/webapp/releases
sudo -u webapp /opt/webapp/bin/deploy.sh --version latest
curl -s http://localhost:8080/health | jq .
### 检查应用程序状态
sudo systemctl status webapp
journalctl -u webapp -n 50 --no-pager
### 查看日志
tail -f /var/log/webapp/application.log
### 数据库备份
sudo /usr/local/bin/backup-db.sh production
## 重要约束
- 只读数据库:此服务器连接到只读副本。永远不要尝试写操作。
- 维护窗口:仅在UTC时间02:00-04:00之间部署
- 监控:https://monitoring.example.com/d/webapp-prod
connections:
my-server:
host: 192.168.1.100
user: username
key_path: ~/.ssh/id_rsa
info_file: my-server.md # 相对路径(解析为 ~/.mcp-ssh-interactive/info/my-server.md)
信息文件路径解析:
my-server.md):相对于~/.mcp-ssh-interactive/info/解析~开头的路径(例如,~/custom/path/server.md):视为绝对路径/开头的路径(例如,/tmp/server.md):视为绝对路径特定于服务器的信息从info_file可供使用该服务器配置的所有会话使用。
服务器通过标准I/O运行,并由您的MCP客户端启动。您也可以手动启动它:
mcp-ssh-interactive
如果未安装tmux或配置无效,服务器将以错误退出。
在您的MCP客户端配置中添加此服务器条目。通用结构如下:
{
"mcpServers": {
"mcp-ssh-interactive": {
"command": "mcp-ssh-interactive"
}
}
}
不同的MCP客户端可能使用不同格式和位置的配置文件。请查阅您特定MCP客户端的相关文档,确定在哪里以及如何添加MCP服务器配置。
添加后,重启或重新加载您的客户端,以便它可以发现新的服务器。
当此MCP服务器对代理可用时,您可以简单地让代理打开my-server服务器上的会话并描述您需要执行的任务。代理通常会自动检查配置文件中的可用服务器列表,找到命名服务器,打开新会话,并执行info_file字段中指定的任何初始化任务(如果已配置)。
服务器提供了以下工具:
~/.mcp-ssh-interactive/config.yml的可用连接配置。info_file(如果有)中检索特定于服务器的信息。所有文件存储在~/.mcp-ssh-interactive/:
~/.mcp-ssh-interactive/
├── config.yml # SSH连接配置
├── state.json # 活动会话状态
├── logs/ # 会话日志
│ └── <session_name>.log
└── info/ # 特定于服务器的信息文件
└── <server-name>.md
文件:
info_file引用的SSH连接配置700;根据需要旋转/修剪info_file字段引用my-server.md)或绝对路径所有文件都位于运行MCP服务器的机器上(您的工作站)。
“tmux未安装或不可访问”
brew install tmux,Linux上使用apt/yum/pacman),并确保它在$PATH中。“找不到配置文件”或“配置为空”
~/.mcp-ssh-interactive/config.yml;验证正确的YAML。“密钥文件未找到”或SSH失败(权限被拒绝,主机密钥验证)
key_path是否存在且具有chmod 600。ssh -i <key> user@host在MCP之外正常工作。known_hosts预接受主机密钥。没有写入日志
~/.mcp-ssh-interactive/logs/存在且可写;服务器会自动创建它。session_name并检查匹配的日志路径。调用get_server_info时出现“信息文件未找到”错误
info_file路径是否正确。~/.mcp-ssh-interactive/info/中。root登录,AI代理可以执行任何root可以执行的命令,包括破坏性操作execute_command工具包括指示AI代理在执行更改状态的命令前请求确认的说明,但这只是指导——不是强制执行。始终保持警惕。此工具强大且方便,但伴随着巨大的权力而来的是巨大的责任。始终明确AI代理被允许做什么。
文件和数据安全:
~/.mcp-ssh-interactive/config.yml或私钥提交到源代码控制。~/.mcp-ssh-interactive/logs/*.log视为敏感;它们可能包含命令输出。~/.mcp-ssh-interactive/info/*.md视为敏感。运行简单的集成检查:
python tests/test_integration.py
MIT