SSH工具封装服务

MCP服务器封装原生SSH/SCP/RSYNC工具,支持SSH配置继承和隔离代理功能

  • by dmikushin
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 dmikushin/mcp-ssh

使用说明

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"
}

依赖项