关于 SSH MCP Server
SSH MCP Server 通过 MCP 提供对远程服务器的 SSH 操作,面向需要让 Agent 执行远程命令、传输文件或管理会话的场景。它保存命名凭据,并验证和固定首次连接的主机密钥指纹。
主要功能
- 01保存和管理 SSH 凭据
- 02执行命令及原始参数命令
- 03通过 SCP 或 rsync 传输文件
- 04管理交互式 SSH 会话
- 05启动和管理端口转发隧道
- 06验证并固定主机密钥指纹
适用场景
- 01在远程主机执行运维命令
- 02在本地与远程主机间传输文件
- 03进行交互式远程会话
- 04为远程连接建立端口转发
MCP 相关
该 MCP 服务向 MCP 客户端暴露凭据管理、SSH 命令执行、文件传输、会话和隧道工具,可用于远程服务器操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SSH MCP 服务
一个提供 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
手动安装
- 克隆仓库:
git clone <repository-url>
cd ssh-server
- 安装依赖:
npm install
- 构建项目:
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 支持的开发依赖项
开发
要修改项目:
- 在
src/目录中进行更改 - 重新构建项目:
npm run build
- 启动服务以测试更改:
npm start
许可证
MIT
贡献
- Fork 仓库
- 创建功能分支
- 提交更改
- 推送到分支
- 创建新的 Pull Request
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。