
让 AI 通过 SSH 安全操作远程服务器的 MCP Server——凭证本地管理,不暴露给模型
AI 可能因幻觉执行破坏性命令(误删文件、错杀进程、重启服务),生产环境务必加防护:
--whitelist "^ls( .*)?,^cat .*,^df.*"--blacklist "^rm .*,^shutdown.*,^reboot.*"--allowed-remote-paths 限制 SFTP 可达路径| 工具 | 说明 |
|---|---|
execute-command | 在远程服务器执行命令并返回结果 |
upload / download | 本地与远程双向文件传输(SFTP) |
list-servers | 列出已配置的 SSH 连接 |
--password;私钥:--privateKey ~/.ssh/id_rsa(可加 --passphrase)~/.ssh/config:只传 --host 别名 即可,命令行参数优先级更高--try-keyboard + 环境变量 SSH_MCP_2FA_CODE生产环境接入前,用三层防护锁住 AI 的操作范围:
1. 命令白名单 / 黑名单(逗号分隔的正则,匹配整条命令):白名单只放行匹配的命令(推荐只放只读命令),黑名单在其之外兜底拦截高危操作,两者可叠加——安装命令里已带一份保守默认,按需增删。
2. SFTP 路径限制:--allowed-remote-paths "/var/log,/opt/app" 把远程可达路径锁定在业务目录,防提示注入读写 ~/.ssh/authorized_keys 等敏感文件;本地侧对应 --allowed-local-paths。
3. 灰度上线:先在测试机以白名单模式试运行,观察 AI 实际发出的命令样式,确认无误再逐步接入生产。
安装 tab 里各客户端的命令遵循同一个结构:客户端前缀 + 服务器命令(如 claude mcp add ssh-mcp-server -- <服务器命令>)。要换用法时,只改 <服务器命令> 部分,前缀原样保留,任何客户端通用。
配置文件模式(多服务器推荐)——先写 ssh-config.json:
json[ { "name": "dev", "host": "1.2.3.4", "port": 22, "username": "alice", "password": "xxx" }, { "name": "bastion", "host": "9.9.9.9", "port": 22, "username": "ops", "password": "yyy", "transportMode": "shell" } ]
服务器命令换成:
bashnpx -y @fangjunjie/ssh-mcp-server --config-file ./ssh-config.json
对话中通过 connectionName 指定目标机器(如「在 prod 上看下磁盘」),省略时用默认连接。密码含 = , { } 等特殊字符时务必用配置文件方式,命令行旧格式会解析出错。