npm.io
1.3.1 • Published 5h agoCLI

@lhtdeg/ssh-mcp-server

Licence
ISC
Version
1.3.1
Deps
4
Size
180 kB
Vulns
0
Weekly
694

ssh-mcp-server

基于 SSH 的 MCP (Model Context Protocol) 服务器,允许通过 MCP 协议远程执行 SSH 命令。

项目介绍

ssh-mcp-server 是一个桥接工具,可以让 AI 助手等支持 MCP 协议的应用通过标准化接口执行远程 SSH 命令。这使得 AI 助手能够安全地操作远程服务器,执行命令并获取结果,而无需直接暴露 SSH 凭据给 AI 模型。

功能亮点

  • 安全连接:支持多种安全的 SSH 连接方式,包括密码认证和私钥认证(支持带密码的私钥)
  • 命令安全控制:通过灵活的黑白名单机制,精确控制允许执行的命令范围,防止危险操作
  • 标准化接口:符合 MCP 协议规范,与支持该协议的 AI 助手无缝集成
  • 会话级连接复用:同一个 MCP 进程内按连接名复用 SSH client,后续命令、上传、下载不需要反复握手
  • 双传输模式:同时支持 execshell 两种 transport,兼容直连主机与堡垒机或跳板机场景
  • 快速文件传输:支持双向文件传输,优先使用 SFTP fastPut / fastGet,失败时回退到流式传输
  • 远程目录快照:可将远程源码树镜像到本地工作区,便于没有 SSH 工具权限的只读子代理直接分析
  • 长任务防超时:长命令可通过任务工具异步执行,避免 MCP 客户端常见的 -32001 请求超时
  • 本地记忆配置:会话中添加的连接会自动保存到默认本地配置文件,下次启动可自动加载
  • 凭据隔离:SSH 凭据完全在本地管理,不会暴露给 AI 模型,增强安全性
  • 即用即走:使用 NPX 可直接运行,无需全局安装,方便快捷

开源仓库

NPM: https://www.npmjs.com/package/@lhtdeg/ssh-mcp-server

工具列表

工具 名称 描述
execute-command shell 命令执行工具 在远程服务器上执行完整 shell 命令字符串并获取结果;长任务可设置 defer: true
execute-command-task 长命令任务工具 启动可能超过 MCP 请求超时的 SSH 命令,并立即返回 taskId
get-command-task-result 长命令轮询工具 根据 taskId 获取长命令执行状态和最终结果
upload 快速上传工具 将本地文件上传到远程服务器指定位置,优先使用 SFTP fastPut
download 快速下载工具 从远程服务器下载文件到本地指定位置,优先使用 SFTP fastGet
snapshot-remote-directory-task 目录快照任务工具 将远程目录递归镜像到本地快照目录,适合先喂给只读 Explore 子代理
get-snapshot-task-result 目录快照轮询工具 根据 taskId 获取目录快照任务状态和本地快照路径
list-servers 服务器列表工具 列出所有可用SSH服务器配置
diagnose-ssh-connection 连接诊断工具 诊断 TCP、SSH 握手、认证和 SFTP 可用性,并给出建议工具调用
add-ssh-connection 会话连接工具 在当前 MCP 会话中注册或替换 SSH 连接,并记入默认本地配置
set-active-ssh-connection 默认连接切换工具 在多个 SSH 连接之间切换默认目标,后续工具可省略 connectionName
save-ssh-connection 配置持久化工具 将会话 SSH 连接保存到 JSON 配置文件,可选择是否写入敏感字段

使用方法

0. 通过 AI Skill 快速配置(推荐)

如果你使用支持 skill 的 AI 编程助手(如 Claude Code),可以直接使用内置的 ssh-mcp-helper skill 通过交互式问答完成安装和配置,无需手动编辑 JSON 文件。

使用方式:

  1. 从本仓库 skills/ 目录安装该 skill
  2. 告诉你的 AI 助手:"帮我配置 ssh-mcp-server" 或 "给 Cursor 加一个 SSH MCP 连接"
  3. skill 会逐步引导你:检查 Node.js 环境 → 选择 MCP 客户端 → 选择认证方式 → 收集连接参数 → 生成并写入配置

该 skill 支持下文所有场景(账号密码、私钥、SSH config 复用、SOCKS 代理、堡垒机、多连接、2FA、命令限制等),并自动生成格式正确的配置。


下面的章节按从简单到复杂的顺序排列,最简单的入门方式就是用账号密码连接服务器。直接复制对应场景下的 mcp.json 配置到你的 MCP 客户端即可使用。

重要提示:在 MCP 配置文件中,每个命令行参数和其值必须是 args 数组中的独立元素。不要用空格将它们连接在一起。例如,使用 "--host", "192.168.1.1" 而不是 "--host 192.168.1.1"

默认本地配置和最小启动

如果服务启动时没有传入 --host--ssh--config-file 等显式连接参数,并且默认本地配置文件存在,服务器会自动加载它:

~/.ssh-mcp-server/connections.json

Windows 下实际路径通常是:

C:\Users\<用户名>\.ssh-mcp-server\connections.json

因此 MCP 客户端可以先用最小配置启动,后续让 AI 通过 add-ssh-connection 添加连接:

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": ["-y", "@lhtdeg/ssh-mcp-server"]
    }
  }
}

add-ssh-connection 会把连接配置自动写入这个默认文件,包括 passwordpassphraseprivateKeyContent 等认证字段。这样 MCP server 或客户端重启后可以直接恢复连接,不需要用户第二次再提供 SSH 信息。如果要把默认文件放到其他位置,可以设置环境变量 SSH_MCP_DEFAULT_CONFIG_FILE

如果你要把远程代码交给没有 SSH 工具权限的 Explore 子代理,优先调用 snapshot-remote-directory-task,等任务完成后直接把返回的本地快照目录交给子代理即可。

1. 账号密码(最简单)
{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456"
      ]
    }
  }
}
2. 账号 + 私钥
{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--privateKey", "~/.ssh/id_rsa"
      ]
    }
  }
}
3. 带密码的私钥
{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--privateKey", "~/.ssh/id_rsa",
        "--passphrase", "pwd123456"
      ]
    }
  }
}
4. 复用 ~/.ssh/config

如果你已经在 ~/.ssh/config 配置了主机别名,服务器会自动从中读取连接参数,mcp.json 里就不用再写一遍。

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "myserver"
      ]
    }
  }
}

假设你的 ~/.ssh/config 包含:

Host myserver
    HostName 192.168.1.1
    Port 22
    User root
    IdentityFile ~/.ssh/id_rsa

你也可以指定自定义的 SSH 配置文件路径:

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "myserver",
        "--ssh-config-file", "/path/to/custom/ssh_config"
      ]
    }
  }
}

注意:命令行参数优先级高于 SSH 配置值。例如,如果你指定了 --port 2222,它会覆盖 SSH 配置中的端口。

5. 通过 SOCKS 代理连接

当目标主机只能通过 SOCKS 代理访问时:

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456",
        "--socksProxy", "socks://username:password@proxy-host:proxy-port"
      ]
    }
  }
}
6. 使用命令白名单 / 黑名单

通过 --whitelist--blacklist 限制服务器允许执行的命令范围。多个模式之间用逗号分隔,每个模式都是一个正则表达式。生产环境强烈建议配置

白名单示例(仅允许只读型查看命令):

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456",
        "--whitelist", "^ls( .*)?,^cat .*,^df.*"
      ]
    }
  }
}

黑名单示例(屏蔽危险命令):

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456",
        "--blacklist", "^rm .*,^shutdown.*,^reboot.*"
      ]
    }
  }
}

注意:如果同时指定了白名单和黑名单,系统会先检查命令是否在白名单中,再检查是否在黑名单中,命令必须同时通过两项检查才能被执行。

7. 使用命令模板包裹命令

commandTemplate 会把每条执行的命令套进一个模板里,适合切换用户(su)、放进容器、或经过跳板机的场景。execute-commandexecute-command-task 接受的是完整的 shell 命令字符串,所以可以直接写 &&;、管道、重定向等 shell 组合;长耗时才用 defer: true 或任务工具,不是因为命令语法受限。当命令会作为 shell 参数传入时使用 <quotedCommand>,需要原样插入时使用 <command>;模板会在目录 cd 拼接之后应用,因此整个 cd ... && <实际命令> 都会被包裹起来。

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "10.0.0.1",
        "--port", "22",
        "--username", "deploy",
        "--password", "xxx",
        "--command-template", "su root -c <quotedCommand>"
      ]
    }
  }
}

当指定目录为 /data 执行 ls /app 时,实际发送的命令是:

su root -c 'cd -- '\''/data'\'' && ls /app'

其他常见模板:

sudo bash -c <quotedCommand>
docker exec -i mycontainer sh -c <quotedCommand>
ssh jumphost <quotedCommand>
8. 堡垒机 / 跳板机(transportMode: shell

transportMode 默认是 exec。出现下面这些情况时,应该切换到 shell

  • SSH 登录成功,但 exec 执行命令失败
  • 远端必须等登录 banner、profile、环境初始化完成后才能正常执行命令
  • 连接目标本质上是堡垒机或只暴露交互式 shell 的设备

两者差异:

  • exec:支持 execute-commanduploaddownload
  • shell:命令通过持久 shell 会话串行执行,内部带命令队列;但不支持 upload / download,因为该模式下禁用了 SFTP
  • shell 模式下单条命令超时会关闭当前 shell channel;后续命令会尽量在同一个 SSH client 上重新打开 shell channel,减少重新认证
{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "bastion.example.com",
        "--port", "22",
        "--username", "ops",
        "--password", "pwd123456",
        "--transport-mode", "shell",
        "--shell-ready-timeout", "15000"
      ]
    }
  }
}

JSON 配置文件中还可以通过 shellCommandTimeoutMs 覆盖 shell 模式下单条命令的默认超时。

9. 多因素认证(2FA / MFA)

当 SSH 服务器要求多因素认证(密码 + 私钥 + 2FA 验证码)时启用 tryKeyboard。密码和私钥会自动提供;对于非密码提示,请在连接前通过服务端环境变量 SSH_MCP_2FA_CODE 提供验证码。

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--host", "example.com",
        "--port", "22",
        "--username", "user",
        "--password", "your_password",
        "--privateKey", "/path/to/key",
        "--try-keyboard"
      ]
    }
  }
}

认证流程:

  1. 私钥认证(如果提供)
  2. 密码认证(如果提供)
  3. 键盘交互式认证通过 SSH_MCP_2FA_CODE 提供 2FA 验证码
10. 多 SSH 连接配置

需要在同一个 MCP server 里同时管理多个 SSH 目标时,给每个连接命名。服务器会按连接名缓存 SSH client,同一个 MCP 进程内后续调用会复用已有连接,不会每次命令都重新握手。

切换目标有两种方式:

  • 单次调用指定 connectionName,只影响当前工具调用
  • 调用 set-active-ssh-connection 切换默认连接,后续 execute-commanduploaddownload 可省略 connectionName

共有三种启动配置方式:

方式一:使用配置文件(推荐)

创建 JSON 配置文件(例如 ssh-config.json):

数组格式:

[
  {
    "name": "dev",
    "host": "1.2.3.4",
    "port": 22,
    "username": "alice",
    "password": "{abc=P100s0}",
    "socksProxy": "socks://127.0.0.1:10808"
  },
  {
    "name": "bastion",
    "host": "9.9.9.9",
    "port": 22,
    "username": "ops",
    "password": "pwd123456",
    "transportMode": "shell",
    "shellReadyTimeoutMs": 15000,
    "shellCommandTimeoutMs": 45000,
    "connectionTimeoutMs": 30000,
    "keepaliveIntervalMs": 10000,
    "keepaliveCountMax": 3
  },
  {
    "name": "prod",
    "host": "5.6.7.8",
    "port": 22,
    "username": "bob",
    "password": "yyy",
    "socksProxy": "socks://127.0.0.1:10808"
  },
  {
    "name": "secure-server",
    "host": "secure.example.com",
    "port": 22,
    "username": "admin",
    "password": "your_password",
    "privateKey": "/path/to/private/key",
    "tryKeyboard": true
  }
]

对象格式:

{
  "dev": {
    "host": "1.2.3.4",
    "port": 22,
    "username": "alice",
    "password": "{abc=P100s0}",
    "socksProxy": "socks://127.0.0.1:10808"
  },
  "bastion": {
    "host": "9.9.9.9",
    "port": 22,
    "username": "ops",
    "password": "pwd123456",
    "transportMode": "shell",
    "shellReadyTimeoutMs": 15000,
    "shellCommandTimeoutMs": 45000
  },
  "prod": {
    "host": "5.6.7.8",
    "port": 22,
    "username": "bob",
    "password": "yyy",
    "socksProxy": "socks://127.0.0.1:10808"
  }
}

然后使用 --config-file 参数:

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--config-file", "ssh-config.json"
      ]
    }
  }
}
方式二:使用 JSON 格式的 --ssh 参数

可以直接传递 JSON 格式的配置字符串:

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@lhtdeg/ssh-mcp-server",
        "--ssh", "{\"name\":\"dev\",\"host\":\"1.2.3.4\",\"port\":22,\"username\":\"alice\",\"password\":\"{abc=P100s0}\",\"socksProxy\":\"socks://127.0.0.1:10808\"}",
        "--ssh", "{\"name\":\"bastion\",\"host\":\"9.9.9.9\",\"port\":22,\"username\":\"ops\",\"password\":\"pwd123456\",\"transportMode\":\"shell\",\"shellReadyTimeoutMs\":15000}",
        "--ssh", "{\"name\":\"prod\",\"host\":\"5.6.7.8\",\"port\":22,\"username\":\"bob\",\"password\":\"yyy\",\"socksProxy\":\"socks://127.0.0.1:10808\"}"
      ]
    }
  }
}
方式三:旧格式逗号分隔(向后兼容)

对于密码中不包含特殊字符的简单情况,仍可使用旧格式:

npx @lhtdeg/ssh-mcp-server \
  --ssh "name=dev,host=1.2.3.4,port=22,user=alice,password=xxx" \
  --ssh "name=prod,host=5.6.7.8,port=22,user=bob,password=yyy"

注意:旧格式在处理包含特殊字符(如 =,{})的密码时可能会有问题。如果密码包含特殊字符,请使用方式一或方式二。

在MCP工具调用时,通过 connectionName 参数指定目标连接名称,未指定时使用默认连接。

示例(在prod连接上执行命令):

{
  "tool": "execute-command",
  "params": {
    "cmdString": "ls -al",
    "connectionName": "prod"
  }
}

示例(带超时选项的命令执行):

{
  "tool": "execute-command",
  "params": {
    "cmdString": "ping -c 10 127.0.0.1",
    "connectionName": "prod",
    "timeout": 5000
  }
}

示例(把后续默认目标切换到 prod):

{
  "tool": "set-active-ssh-connection",
  "params": {
    "connectionName": "prod"
  }
}
在会话中添加 SSH 连接

如果用户在对话中提供了 SSH 连接信息,可以先调用 add-ssh-connection,把连接注册到当前 MCP 会话中,无需先编辑配置文件:

{
  "tool": "add-ssh-connection",
  "params": {
    "name": "temp-dev",
    "host": "1.2.3.4",
    "port": 22,
    "username": "alice",
    "privateKeyContent": "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----",
    "commandWhitelist": ["^ls", "^pwd"]
  }
}

默认情况下,新连接会成为当前 MCP 会话的默认连接,后续 execute-commanduploaddownload 可以直接使用它;也可以传 connectionName: "temp-dev" 显式指定。若只想注册连接但不切换默认目标,设置 setDefault: false

add-ssh-connection 会同时把连接字段和认证字段自动保存到默认本地配置文件或当前 --config-file 指向的配置文件。这样 MCP server 重启后仍能自动加载连接信息,不需要 AI 在同一会话里反复调用 add-ssh-connection,也不需要用户第二次再提供密码或私钥内容。

认证方式按需传一种即可:passwordagent、作为本地私钥文件路径的 privateKey,或会话中直接提供私钥内容的 privateKeyContent

如果需要手动保存或另存到指定配置文件,可以调用 save-ssh-connection。默认会写入认证字段:

{
  "tool": "save-ssh-connection",
  "params": {
    "connectionName": "temp-dev",
    "configFilePath": "ssh-config.json"
  }
}

如果服务启动时已经使用 --config-file,可以省略 configFilePath,连接会保存回该文件;否则保存到默认本地配置文件。只有在明确需要导出脱敏配置时,才设置 includeSensitive: false,此时会省略 passwordpassphraseprivateKeyContent

命令执行超时

execute-command 工具支持超时选项,防止命令无限期挂起:

  • timeout: 命令和连接建立的超时时间(毫秒,可选,默认为30000ms)
  • 对于明确需要长时间运行的命令,可以将 timeout 设置为 0,表示不启用命令执行超时
  • 如果命令可能超过 MCP 客户端的请求超时(常见表现是 -32001Tool execution timed out after 30000ms),不要让 AI 改用本机 ssh 命令绕过 MCP,应该使用 defer: trueexecute-command-task
  • 这条规则已经写入 MCP server instructions、工具描述和错误响应的 nextActions,让 AI 在选择工具时就能看到
  • shell 模式下,还可以在 JSON 配置文件里为单个连接设置 shellCommandTimeoutMs
  • 连接默认启用 SSH keepalive(keepaliveIntervalMs: 10000,keepaliveCountMax: 3),并使用 connectionTimeoutMs 限制连接建立时间
  • SFTP 打开和传输操作使用 sftpTimeoutMs 控制超时(默认 300000ms)
  • 错误响应现在包含稳定的 codemessageretriable 字段,便于上层 Agent 处理

这对于像 pingtail -f 或其他可能阻塞执行的长时间运行进程特别有用。

短命令直接调用:

{
  "tool": "execute-command",
  "params": {
    "cmdString": "uname -m",
    "timeout": 20000
  }
}

长命令建议让工具立即返回 taskId

{
  "tool": "execute-command",
  "params": {
    "cmdString": "sleep 120 && uname -m",
    "timeout": 180000,
    "defer": true
  }
}

也可以直接使用任务工具:

{
  "tool": "execute-command-task",
  "params": {
    "cmdString": "sleep 120 && uname -m",
    "timeout": 180000,
    "connectionName": "prod"
  }
}

随后轮询结果:

{
  "tool": "get-command-task-result",
  "params": {
    "taskId": "ssh-task-..."
  }
}

如果普通命令超时后连接状态不确定,可以先调用 diagnose-ssh-connection,它会返回 TCP、SSH 握手、认证、SFTP 可用性和建议的下一步工具调用。

{
  "tool": "diagnose-ssh-connection",
  "params": {
    "connectionName": "prod"
  }
}
上传和下载

upload / downloadexec transport 下使用 SFTP。实现会优先调用 ssh2 的 fastPut / fastGet,如果运行环境不支持再回退到流式传输。SFTP 打开和传输共享 sftpTimeoutMs,默认 300000ms。

上传示例:

{
  "tool": "upload",
  "params": {
    "localPath": "D:\\work\\package.tar.gz",
    "remotePath": "/tmp/package.tar.gz",
    "connectionName": "prod"
  }
}

下载示例:

{
  "tool": "download",
  "params": {
    "remotePath": "/var/log/app.log",
    "localPath": "D:\\work\\app.log",
    "connectionName": "prod"
  }
}

shell transport 不支持 SFTP,因此不能使用 upload / download。如果必须经过堡垒机传输文件,建议在远端先通过命令自行拉取,或为可直连目标配置一个 exec transport 的连接。

列出所有SSH服务器

可以通过MCP工具 list-servers 获取所有可用的SSH服务器配置:

调用示例:

{
  "tool": "list-servers",
  "params": {}
}

返回示例:

[
  { "name": "dev", "host": "1.2.3.4", "port": 22, "username": "alice" },
  { "name": "prod", "host": "5.6.7.8", "port": 22, "username": "bob" }
]
命令行选项参考
选项:
  --config-file       JSON 配置文件路径(推荐用于多服务器配置)
  --ssh-config-file   SSH 配置文件路径(默认: ~/.ssh/config)
  --ssh               SSH 连接配置(可以是 JSON 字符串或旧格式)
  -h, --host          SSH 服务器主机地址或 SSH 配置中的别名
  -p, --port          SSH 服务器端口
  -u, --username      SSH 用户名
  -w, --password      SSH 密码
  -k, --privateKey    SSH 私钥文件路径
  -P, --passphrase    私钥密码(如果有的话)
  -a, --agent         SSH agent socket 路径
  --try-keyboard      启用键盘交互式认证以支持 2FA/MFA(默认: false)
  -W, --whitelist     命令白名单,以逗号分隔的正则表达式
  -B, --blacklist     命令黑名单,以逗号分隔的正则表达式
  -s, --socksProxy    SOCKS 代理地址(如 socks://user:password@host:port)
  --allowed-local-paths   upload/download 允许访问的额外本地路径,逗号分隔
  --allowed-remote-paths  SFTP upload/download 允许访问的远端路径(POSIX 绝对路径),逗号分隔
  --transport-mode    SSH transport 模式: exec 或 shell(默认: exec)
  --shell-ready-timeout   shell 就绪探测超时,单位毫秒(默认: 10000)
  --command-template  命令模板;shell 参数用 <quotedCommand>,原样插入用 <command>
  --pty               为命令执行分配伪终端(默认: true)
  --pre-connect       启动时预连接所有配置的 SSH 服务器
  --version, -v       打印包版本
  --help              打印帮助信息

安全注意事项

该服务器提供了在远程服务器上执行命令和传输文件的强大功能。为确保安全使用,请注意以下几点:

  • 命令白名单强烈建议 使用 --whitelist 选项来限制可执行的命令集合。如果没有白名单,任何命令都可以在远程服务器上执行,这可能带来重大的安全风险。
  • 私钥安全:服务器会将 SSH 私钥读入内存。请确保运行 ssh-mcp-server 的机器是安全的。不要将服务器暴露给不受信任的网络。
  • 拒绝服务攻击 (DoS):服务器没有内置的速率限制。攻击者可能通过向服务器发送大量连接请求或大文件传输来发起 DoS 攻击。建议在具有速率限制功能的防火墙或反向代理后面运行服务器。
  • 路径遍历:服务器内置了对本地文件系统路径遍历攻击的保护。但是,仍然需要注意在 uploaddownload 命令中使用的路径。
  • 本地传输范围:默认仅允许访问当前工作目录。只有在明确可信时,才建议通过 --allowed-local-paths 或配置文件中的 allowedLocalPaths 放宽范围。
  • 远端传输范围:SFTP upload/download 仅接受绝对 POSIX 路径。未配置 allowedRemotePaths(或 --allowed-remote-paths)时,任意远端路径都允许,但启动时会打印警告。强烈建议显式配置 allowedRemotePaths 白名单,避免模型被 prompt 注入后读写 ~/.ssh/authorized_keys/etc/sshd_config 之类敏感文件。

Keywords