使用说明
SSH-MCP服务器
SSH客户端服务器的Rust实现,集成了模型上下文协议(MCP),允许大型语言模型(LLM)连接到SSH服务器并利用SSH功能。
轻便高效:
- 🚀
ssh-mcp:仅4.3MB二进制大小,1.8MB内存占用 - 🔄
ssh-mcp-stdio:二进制文件大小仅为1.5MB,内存使用量为2.3MB - 🐳
docker:最终图像大小仅为27.5MB
特性
- SSH客户端集成:通过MCP命令连接到SSH服务器
- SSH命令执行:在远程SSH服务器上运行命令
- 端口转发:设置SSH隧道和端口转发(默认情况下通过
port_forward特征) - 会话管理:跟踪和管理多个SSH会话
- MCP协议支持:内置诗意mcpserver,实现AI/LLM兼容性
- 有状态的连接:跨多个命令维护SSH会话
安装和集成
您有两个安装选项:
选项1:使用Docker(推荐)
不需要Rust工具链,只需要Docker!
# Pull the pre-built image from Docker Hub
docker pull mingyang91/ssh-mcp
# Run the server
docker run -p 8000:8000 mingyang91/ssh-mcp
或者自己塑造形象:
# Build the Docker image
docker build -t ssh-mcp .
# Run the server
docker run -p 8000:8000 ssh-mcp
选项2:通过Cargo安装
先决条件:
- Rust 1.70.0或更高版本
- 货物包装经理
cargo install ssh-mcp
与mcpServers集成
要将SSH-MCP与mcpServers一起使用,请将以下配置添加到mcpServers-JSON配置中:
如果通过Cargo安装:
{
"mcpServers": {
"ssh": {
"command": "ssh-mcp-stdio",
"args": []
}
}
}
如果使用Docker:
{
"mcpServers": {
"ssh": {
"command": "docker",
"args": ["run", "--entrypoint", "ssh-mcp-stdio", "-i", "--rm", "ssh-mcp"]
}
}
}
这将注册SSH处理程序,允许LLM通过MCP服务器管理SSH连接。
用法
连接到SSH服务器
使用密码身份验证
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user",
"password": "password"
}
}
使用密钥身份验证
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user",
"key_path": "/path/to/private_key"
}
}
使用SSH代理身份验证
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user"
}
}
答复:
{
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"message": "Successfully connected to user@example.com:22",
"authenticated": true
}
如果连接失败:
{
"error": "Failed to connect: Connection refused"
}
执行命令
{
"command": "ssh_execute",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"command": "ls -la"
}
}
答复:
{
"stdout": "total 32\ndrwxr-xr-x 5 user group 4096 Jan 1 12:00 .\ndrwxr-xr-x 25 user group 4096 Jan 1 12:00 ..\n-rw-r--r-- 1 user group 142 Jan 1 12:00 file.txt\n",
"stderr": "",
"exit_code": 0
}
设置端口转发
注意:默认情况下,端口转发通过 port_forward 特征标志。
{
"command": "ssh_forward",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"local_port": 8080,
"remote_address": "internal-server",
"remote_port": 80
}
}
答复:
{
"local_address": "127.0.0.1:8080",
"remote_address": "internal-server:80",
"active": true
}
断开会话连接
{
"command": "ssh_disconnect",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b"
}
}
答复:
"Session c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b disconnected successfully"
列出所有活动会话
{
"command": "ssh_list_sessions"
}
答复:
[
"c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"d9b4c3a2-5e6f-7g8h-9i0j-1k2l3m4n5o6p"
]
配置
可以通过以下环境变量配置服务器:
| 变量 | 描述 | 默认值 |
|---|---|---|
| MCP_PORT | MCP服务器的端口 | 8000 |
| RUST_LOG | 日志记录级别 | 信息 |
功能配置
该项目使用Cargo功能启用/禁用某些功能:
| 功能 | 描述 | 默认值 |
|---|---|---|
| port_forward | 启用SSH端口转发支持 | 已启用 |
要构建而不进行端口转发,请执行以下操作:
cargo build --release --no-default-features
贡献
欢迎投稿!请随时提交拉取请求。
CI/CD管道
本项目使用GitHub Actions进行持续集成和部署:
- 所有PR和对main的提交都会自动测试
- 标记的版本(以“v”开头)会自动发布到crates.io
- Docker镜像会自动构建并推送到Docker Hub
- 主分支的最新标签
- 语义版本发布(v1.0.0、v1.0等)的版本标签
- 要创建新版本,请确保Cargo.toml中的版本与标签匹配(例如v0.1.0)
- 您需要设置
CARGO_REGISTRY_TOKEN,DOCKERHUB_USERNAME,以及DOCKERHUB_TOKENGitHub存储库设置中的秘密
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。