使用说明
mcp-ssh
包装本机的MCP服务器 ssh/scp/rsync 二进制文件。继承ControlMaster多路复用、ProxyJump、代理转发和其他所有功能 ~/.ssh/config 免费。
为什么
现有的SSH MCP服务器使用不可读的JS SSH库 ~/.ssh/config,不支持ProxyJump,并为每个命令重新连接。此服务器只是调用 ssh, scp,以及 rsync 通过 os/exec,因此它会自动获取您的所有SSH配置功能。
工具
| 工具 | 说明 |
|---|---|
ssh_list_hosts |
列出来自的所有主机 ~/.ssh/config 包含主机名、用户、端口 |
ssh_run |
通过配置别名在远程主机上运行命令 |
ssh_run_batch |
在单个SSH会话中顺序运行多个命令(&&-加入) |
ssh_upload |
上传文件(rsync(如果可用),scp回退) |
ssh_download |
下载文件(rsync(如果可用),scp回退) |
ssh_check |
测试与主机的连接(ssh -o ConnectTimeout=5 host true) |
ssh_add_key |
在运行时向隔离代理添加SSH私钥 |
ssh_list_keys |
列出隔离代理中当前加载的密钥 |
隔离SSH代理
服务器可以运行自己的 ssh-agent 用一套有限的钥匙,让孩子 ssh/scp/rsync 进程永远看不到完整的用户密钥环。
从预加载密钥 ~/.ssh/config
添加 # mcp-keys: 之前的评论 Host 块中 ~/.ssh/config:
# mcp-keys: ~/.ssh/keys/id_rsa.github
Host github.com
User git
IdentityFile ~/.ssh/keys/id_rsa.github
# mcp-keys: ~/.ssh/keys/id_ed25519.oracle
Host oracle
Hostname gateway.mikush.in
User marcusmae
启动时,服务器会收集所有 # mcp-keys: 条目,产生孤立 ssh-agent,并且仅加载这些密钥。每行支持多个逗号分隔键。
在运行时添加密钥
AI代理可以调用 ssh_add_key 按需加载额外的密钥。如果没有代理正在运行,则会自动启动一个。
ssh_list_keys 显示当前加载的所有密钥的指纹。
不 mcp-keys 配置
如果没有 # mcp-keys: 评论和 ssh_add_key 从未被调用,没有启动隔离代理,系统 SSH_AUTH_SOCK 按原样继承。
文件传输:rsync与scp
自动首选上传和下载工具 rsync 当它在本地机器和远程主机上都可用时。每侧执行一次检查,并在服务器进程的生命周期内缓存。如果 rsync 两边都不见了,工具就倒回去了 scp.
rsync优于scp的优点:
- 增量传输——只发送文件的更改部分
- 压缩(
-z)在电线上 - 可恢复的转账(
--partial) - 保留属性(
-a)
构建
go build -o mcp-ssh .
Claude代码集成
添加 ~/.claude.json 在...之下 mcpServers:
"mcp-ssh": {
"command": "/path/to/mcp-ssh"
}
依赖项
- github/modelcontextprotocol/go-sdk --官方MCP Go SDK
- https://kevinburke/ssh_config --SSH配置解析器
