SSH代理服务

为MCP客户端提供安全的SSH访问,支持OpenSSH配置兼容性、连接池和输出保护。

  • by B143KC47
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 B143KC47/ssh_mcp

使用说明

SSH MCP服务器

英语 | 中文

MCP客户端的安全SSH访问。 ssh_mcp 允许Claude Desktop、VS Code Copilot、Augment和其他MCP兼容代理通过具有OpenSSH配置兼容性、连接池和输出护栏的安全第一SSH代理运行远程命令。

项目健康状况

为什么开发人员选择这个项目

  • 使用您已经知道的SSH配置:标准OpenSSH字段,如 Host, HostName, User, Port, IdentityFile,以及 ProxyJump
  • 比未加工的贝壳桥更安全:内置危险命令阻止、按主机分配列表/拒绝列表、输出上限和秘密编辑
  • 快速进行多步骤代理会话:池化SSH连接减少了重新连接的开销
  • 适用于真实的MCP工作流程:专为Claude Desktop、VS Code Copilot、Augment和任何兼容MCP的客户端而设计
  • 团队灵活:合并项目级和用户级配置,使共享主机保持全局状态,而项目覆盖保持本地状态

非常适合

  • 人工智能辅助生产故障排除
  • 远程服务器上的安全可观察性和只读操作
  • DevOps和平台工程副产品
  • 需要SSH访问而无需向代理提供无限shell自由的内部工具

快速开始

1.安装和构建

npm install
npm run build

2.将服务器添加到MCP客户端

请参阅中的现成复制示例:

  • examples/mcp-config.claude.example.json
  • examples/mcp-config.vscode.example.json

最小克劳德桌面/增强示例:

{
  "mcpServers": {
    "ssh": {
      "command": "node",
      "args": [
        "/absolute/path/to/ssh-mcp-server/dist/index.js",
        "--project-root",
        "/path/to/your/project"
      ],
      "env": {}
    }
  }
}

最小VS代码MCP示例:

{
  "servers": {
    "ssh": {
      "command": "node",
      "args": [
        "/absolute/path/to/ssh-mcp-server/dist/index.js",
        "--project-root",
        "${workspaceFolder}"
      ]
    }
  }
}

3.配置SSH主机

复制 examples/ssh.config.example 到 ssh.config 在您的项目根目录中,或通过MCP工具初始化一个:

Use tool: ssh_init_config with scope="project"

最小示例:

Host my-server
  HostName 192.168.1.100
  User ubuntu
  Port 22
  IdentityFile ~/.ssh/id_rsa
  # mcp-ssh:denylist = rm -rf,mkfs,dd,shutdown,reboot

4.在MCP客户端中尝试一些提示

  • “列出所有已配置的SSH主机。”
  • “测试SSH连接到 my-server."
  • “跑 uptime && df -h 上 my-server."
  • “显示合并的SSH配置 my-server."

核心功能

  • 双作用域配置:项目级别(ssh.config)+用户级别(~/.config/mcp-ssh/config)自动合并
  • 连接池:通过空闲清理跨命令重用SSH连接
  • 每台主机的安全策略:允许列表、拒绝列表、最大超时和最大输出大小
  • 输出管理:自动截断以保护LLM上下文窗口
  • 敏感数据保护:私钥和敏感环境值在输出中被净化
  • OpenSSH兼容性:继续使用正常的主机别名和SSH习惯

配置

配置文件位置

范围 路径 目的
项目 <project-root>/ssh.config 特定于当前项目的主机
用户 ~/.config/mcp-ssh/config 跨项目共享主机

合并规则:项目级设置会覆盖同名主机的用户级设置。

安全注解

将策略作为注释添加到 Host 块:

# mcp-ssh:denylist = cmd1,cmd2      # Block these command patterns
# mcp-ssh:allowlist = cmd1,cmd2     # Only allow these command patterns
# mcp-ssh:maxTimeoutMs = 30000      # Max execution timeout for this host
# mcp-ssh:maxOutputChars = 5000     # Max output characters for this host

身份验证顺序

  1. 私钥 从 IdentityFile
  2. SSH代理 通过 SSH_AUTH_SOCK (Unix)或Pageant(Windows)
  3. 密码 通过环境变量 SSH_PASSWORD_<HOST>

示例:用于主机 my-server,set SSH_PASSWORD_MY_SERVER=secret.

为什么这比普通的SSH包装器更好

普通远程执行桥 SSH MCP服务器
经常暴露一个几乎没有策略控制的完整shell 支持每台主机的allowlists/denylists
为每个代理步骤重新连接 重用池连接
容易溢出具有大量输出的模型上下文 自动截断输出
自定义主机定义 使用熟悉的OpenSSH配置语法
机密可能会泄露到日志中 对输出进行消毒并隐藏敏感值

MCP工具

工具 说明 参数
ssh_list_hosts 列出所有可用的SSH主机 --
ssh_exec 在远程主机上执行命令 host, command, timeout_ms?
ssh_init_config 初始化SSH配置文件 scope, project_root?, hosts?
ssh_get_config 获取特定主机的配置 host
ssh_test_connection 测试与主机的连接 host
ssh_disconnect 断开一个主机或所有活动会话的连接 host?

MCP资源

URI 描述
ssh://hosts 所有配置的SSH主机的JSON列表

安全第一默认值

  • 危险命令,如 rm -rf /, mkfs, dd if=, shutdown,以及 reboot 默认情况下被阻止
  • 从输出中编辑私钥材料和敏感环境值
  • 命令在执行前经过净化
  • 并发连接数和空闲寿命有限

建议用于生产:

  1. 更喜欢 IdentityFile 通过密码验证
  2. 使用 # mcp-ssh:allowlist 对于生产主机
  3. 添加 ssh.config 到 .gitignore 如果它包含敏感的主机名
  4. 启用 --strict-host-key 生产中
  5. 使用SSH证书或固定 known_hosts 尽可能输入

CLI选项

ssh-mcp-server [options]

--project-root <path>     Project root directory (for project-level ssh.config)
--user-config <path>      Custom user config path (default: ~/.config/mcp-ssh/config)
--strict-host-key         Enable strict host key checking
--no-strict-host-key      Disable strict host key checking (default)
--timeout <ms>            Default command timeout in ms (default: 60000)
--max-output <chars>      Maximum output characters per stream (default: 10000)
--max-connections <n>     Maximum concurrent SSH connections (default: 5)
--idle-timeout <ms>       Connection idle timeout in ms (default: 600000)

发展

# Install dependencies
npm install

# Run in dev mode
npm run dev -- --project-root .

# Build
npm run build

# Run the built server
npm start -- --project-root .

# Debug with MCP Inspector
npm run inspect

贡献

欢迎问题和拉取请求。如果您希望支持更多的MCP客户端、更强大的安全策略或更好的SSH人体工程学,请打开一个问题并共享您想要启用的工作流程。

有关贡献者工作流程的详细信息,请参阅 贡献.md.

社区

许可证

麻省理工学院——见 许可证.