mcpField
S
SSH MCP Server

SSH MCP Server

本地服务
github.com/KinoThe-Kafkaesque开发工具111 天前更新

关于 SSH MCP Server

SSH MCP Server 通过 MCP 提供对远程服务器的 SSH 操作,面向需要让 Agent 执行远程命令、传输文件或管理会话的场景。它保存命名凭据,并验证和固定首次连接的主机密钥指纹。

主要功能

  1. 01保存和管理 SSH 凭据
  2. 02执行命令及原始参数命令
  3. 03通过 SCP 或 rsync 传输文件
  4. 04管理交互式 SSH 会话
  5. 05启动和管理端口转发隧道
  6. 06验证并固定主机密钥指纹

适用场景

  1. 01在远程主机执行运维命令
  2. 02在本地与远程主机间传输文件
  3. 03进行交互式远程会话
  4. 04为远程连接建立端口转发

MCP 相关

该 MCP 服务向 MCP 客户端暴露凭据管理、SSH 命令执行、文件传输、会话和隧道工具,可用于远程服务器操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"ssh-mcp-server-kinothe-kafkaesque": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
启动命令npx -y @smithery/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@smithery/cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

SSH MCP 服务

smithery badge

一个提供 SSH 功能的模型上下文协议(MCP)服务实现。此服务支持通过 MCP 协议安全地远程访问和执行操作。

功能

  • 使用 MCP 协议实现 SSH 服务
  • 集成 SQLite 数据库以持久化数据
  • 使用 TypeScript 实现,确保类型安全并提升开发体验

前提条件

  • Node.js 18 或更高版本
  • npm 或 yarn 包管理器
  • 具备 TypeScript 开发知识

安装

通过 Smithery 安装

通过 Smithery 自动为 Claude Desktop 安装 SSH 服务:

npx -y @smithery/cli install @KinoThe-Kafkaesque/ssh-mcp-server --client claude
手动安装
  1. 克隆仓库:
git clone <repository-url>
cd ssh-server
  1. 安装依赖:
npm install
  1. 构建项目:
npm run build

使用方法

配置

此服务使用 SQLite 数据库(ssh.db)存储 SSH 凭据。服务启动时会自动创建 数据库文件。

工具

此服务会存储命名凭据,之后每项远程操作都通过 credentialName 指定凭据。privateKeyPath 必须指向现有的私钥 (~/ 会展开为你的主目录)。

系统会验证主机密钥:凭据首次连接时,服务会将主机密钥指纹固定保存到 ~/ssh.db 中。之后的连接如果提供了不同的密钥,系统会拒绝连接并返回 HOST_KEY_MISMATCH。若要预先固定已知密钥,请传入 hostKeyFingerprint(即服务器上运行 ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub 后显示的 SHA256:... 值)。密钥合法更换后,请删除该凭据并重新添加。

  • add_credential:保存 { "name", "host", "username", "privateKeyPath", "hostKeyFingerprint"? }。
  • list_credentials:列出已存储的凭据记录。
  • remove_credential:删除 { "name" }。
  • ssh_exec:使用 { "credentialName", "command", "timeout" } 运行 shell 命令。
  • ssh_exec_raw:运行 argv 格式的命令数组,例如 { "credentialName": "prod", "command": ["grep", "-E", "foo|bar", "/var/log/app.log"] }。
  • scp_copy:使用 { "credentialName", "localPath", "remotePath", "direction" } 通过 SFTP 复制单个文件。
  • rsync_copy:使用 rsync 复制目录或较大的目录树,传输参数格式相同。
  • ssh_session_start、ssh_session_send、ssh_session_read、ssh_session_end、ssh_session_list:管理交互式 SSH 会话。
  • ssh_tunnel_start、ssh_tunnel_list、ssh_tunnel_stop:管理本地或远程端口转发隧道。

示例:

{
  "tool_name": "ssh_exec",
  "arguments": {
    "credentialName": "prod",
    "command": "uptime",
    "timeout": 120000
  }
}
启动服务
npm start

服务将在配置的端口上启动(默认设置可在源代码中修改)。

CLI 用法

CLI 与 MCP 服务共享 ~/ssh.db 凭据存储。进行远程操作时,它会使用 OpenSSH 多路复用连接,因此,对同一主机、用户名和密钥进行的独立 CLI 调用会复用同一个已通过身份验证的传输连接。请先构建,然后通过 npm run cli -- 或在执行 npm link 后通过 sshcli 二进制文件运行:

npm run build && npm run cli -- <command>
# or, after linking:
npx sshcli <command>

命令:

sshcli creds add prod --host 1.2.3.4 --user ubuntu --key ~/.ssh/id_rsa
sshcli creds list
sshcli creds rm prod
sshcli exec prod uptime
sshcli exec prod --timeout 30000 -- df -h /
sshcli exec --raw prod grep -E 'foo|bar' /var/log/app.log
sshcli scp prod ./file.txt /tmp/file.txt toRemote
sshcli rsync prod ./dir/ /tmp/dir/ fromRemote
sshcli session prod   # live interactive shell; Ctrl+D or exit to close
sshcli tunnel prod --type local --local-port 8080 --remote-host localhost --remote-port 80
sshcli cache status prod
sshcli cache close prod

注意:

  • 对于 exec,可变参数 <command...> 会贪婪匹配,因此请将 --timeout 和 --raw 等选项放在命令标记之前。
  • exec、scp、rsync、session 和 tunnel 都会复用同一个连接。默认情况下,空闲连接会缓存 30 分钟。
  • 对于某个端点的首次连接尝试,会在 CLI 进程之间串行执行。尝试失败后会触发 15 秒的指数退避重连,最长可达 5 分钟,以防反复调用持续冲击受速率限制的主机。
  • session 和 tunnel 是前台命令,会一直阻塞,直到 shell 关闭或你按下 Ctrl+C;退出这些命令不会关闭共享传输连接。
  • CLI 特意省略了 session send/read/end/list 和 tunnel list/stop 命令:这些命令的内存状态不会在一次性 CLI 调用之间持久保留。请改用前台 session 和 tunnel 命令。
  • 缓存位于 $XDG_RUNTIME_DIR/sshcli/connections 下(或每位用户专用的临时目录中)。可通过 SSHCLI_CONTROL_PERSIST_SECONDS、SSHCLI_RECONNECT_BACKOFF_MS、SSHCLI_RECONNECT_BACKOFF_MAX_MS 或 SSHCLI_CACHE_DIR 调整。
  • 对应的 CLI 命令需要在 PATH 中提供 OpenSSH、scp 和 rsync。

项目结构

  • src/ - 源代码目录
  • build/ - 编译后的 JavaScript 输出
  • node_modules/ - 项目依赖

依赖项

  • @modelcontextprotocol/sdk:MCP 协议实现
  • sqlite3:SQLite 数据库驱动程序
  • typescript:TypeScript 支持的开发依赖项

开发

要修改项目:

  1. 在 src/ 目录中进行更改
  2. 重新构建项目:
npm run build
  1. 启动服务以测试更改:
npm start

许可证

MIT

贡献

  1. Fork 仓库
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建新的 Pull Request

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。