$npx -y skills add badseal/ssh-skill --skill ssh-skillCRITICAL: Use this skill for ALL SSH/server operations. NEVER run raw ssh/scp directly. Triggers: SSH, remote server, server IP/hostname/user@host, connect/login, run command on server, check server/status, deploy, upload/download, file transfer, bastion/jump host, server-to-serv
| 1 | # SSH Skill v3.3.1 |
| 2 | |
| 3 | 高性能 SSH 操作技能,支持守护进程长连接、自动连接复用、跳板机、批量并发、服务器间直接传输、自动错误恢复。 |
| 4 | |
| 5 | ## 快捷命令 |
| 6 | |
| 7 | 当用户通过 `/ssh-skill <参数>` 调用本 skill 时,根据参数执行对应操作: |
| 8 | |
| 9 | ### `/ssh-skill list` |
| 10 | |
| 11 | 列出所有已配置的服务器。执行以下步骤: |
| 12 | |
| 13 | 1. 运行命令获取数据: |
| 14 | ```bash |
| 15 | python ~/.claude/skills/ssh-skill/scripts/ssh_config_manager_v3.py list-servers |
| 16 | ``` |
| 17 | 2. 解析返回的 JSON 数据 |
| 18 | 3. 以 **Markdown 表格** 格式展示,列:序号、别名、备注(description)、标签(tags)、位置(location)、认证方式(auth)、用户名(user) |
| 19 | 4. 在表格末尾显示服务器总数 |
| 20 | |
| 21 | 表格示例格式: |
| 22 | ``` |
| 23 | | # | 别名 | 备注 | 标签 | 位置 | 认证 | 用户名 | |
| 24 | |---|------|------|------|------|------|--------| |
| 25 | | 1 | mgmt-01 | 管理服务器 | 管理,Warpgate | 丰台机房 | 密钥 | root | |
| 26 | ``` |
| 27 | |
| 28 | ### `/ssh-skill find <关键词>` |
| 29 | |
| 30 | 查找匹配的服务器,格式同 list。 |
| 31 | |
| 32 | ### `/ssh-skill help` |
| 33 | |
| 34 | 展示 SSH Skill 的帮助文档。以 Markdown 格式输出以下内容: |
| 35 | |
| 36 | **SSH Skill v3.3.1 - 高性能 SSH 操作技能** |
| 37 | |
| 38 | **核心特点:** |
| 39 | - 守护进程长连接:首次连接后自动启动守护进程,后续命令响应时间从 ~0.45s 降至 ~0.12s |
| 40 | - 自动连接复用:多个 Claude Code 实例可共享同一守护进程 |
| 41 | - SFTP 高级传输:支持断点续传、进度显示、目录递归上传/下载 |
| 42 | - 服务器间直接传输:支持服务器到服务器的文件直接传输,无需本地中转 |
| 43 | - SSH 隧道:支持本地端口转发,访问远程内网服务(数据库、Web 服务等) |
| 44 | - 跳板机支持:通过 ProxyJump 自动处理多级跳板机 |
| 45 | - 批量并发操作:支持对多台服务器并发执行命令 |
| 46 | - 自动错误恢复:SSH 连接断开自动重连(最多 3 次) |
| 47 | |
| 48 | **快捷命令:** |
| 49 | - `/ssh-skill list` - 列出所有已配置的服务器 |
| 50 | - `/ssh-skill find <关键词>` - 查找匹配的服务器 |
| 51 | - `/ssh-skill transfer <源> <源路径> <目标> <目标路径>` - 服务器间文件传输 |
| 52 | - `/ssh-skill tunnel <别名> <端口>` - 启动 SSH 隧道 |
| 53 | - `/ssh-skill help` - 显示此帮助信息 |
| 54 | |
| 55 | **常用操作:** |
| 56 | |
| 57 | 1. 执行远程命令: |
| 58 | ``` |
| 59 | 在 <别名> 上执行 <命令> |
| 60 | ``` |
| 61 | |
| 62 | 2. 上传文件: |
| 63 | ``` |
| 64 | 上传 <本地路径> 到 <别名> 的 <远程路径> |
| 65 | ``` |
| 66 | |
| 67 | 3. 下载文件: |
| 68 | ``` |
| 69 | 从 <别名> 下载 <远程路径> 到 <本地路径> |
| 70 | ``` |
| 71 | |
| 72 | 4. 服务器间传输: |
| 73 | ``` |
| 74 | 从 <源别名> 传输 <路径> 到 <目标别名> 的 <路径> |
| 75 | 将 <别名A> 的文件迁移到 <别名B> |
| 76 | ``` |
| 77 | |
| 78 | 5. SSH 隧道: |
| 79 | ``` |
| 80 | 建立到 <别名> 的 MySQL 隧道 |
| 81 | 连接 <别名> 的数据库 |
| 82 | 访问 <别名> 的内部服务 |
| 83 | ``` |
| 84 | |
| 85 | 6. 批量操作: |
| 86 | ``` |
| 87 | 在所有服务器上执行 <命令> |
| 88 | 在生产环境服务器上执行 <命令> |
| 89 | ``` |
| 90 | |
| 91 | **配置管理:** |
| 92 | - 配置文件位置:`~/.ssh/config` |
| 93 | - 使用标准 OpenSSH 格式 + 注释元数据 |
| 94 | - 支持密钥认证和密码认证 |
| 95 | - 支持 ProxyJump 跳板机配置 |
| 96 | |
| 97 | **性能对比:** |
| 98 | - 直连模式:单次命令 ~0.45s,连续 10 条 ~4.5s |
| 99 | - 守护进程模式:单次命令 ~0.12s,连续 10 条 ~1.2s |
| 100 | |
| 101 | 更多详细信息请参考 SKILL.md 文档。 |
| 102 | |
| 103 | ### 其他参数 |
| 104 | |
| 105 | 将参数作为用户意图理解,按照下方调用规则执行对应的 SSH 操作。 |
| 106 | |
| 107 | ## CRITICAL: 调用规则 |
| 108 | |
| 109 | ### 路径说明 |
| 110 | |
| 111 | **默认路径**:`~/.claude/skills/ssh-skill/scripts` |
| 112 | - `~` 会自动展开为用户家目录(Windows 和 Linux 通用) |
| 113 | - Windows: `C:\Users\用户名\.claude\skills\ssh-skill\scripts` |
| 114 | - Linux: `/home/用户名/.claude/skills/ssh-skill/scripts` |
| 115 | |
| 116 | **项目目录中的 skill**:如果 skill 放在项目的 `.claude/skills/ssh-skill/` 中,使用相对路径: |
| 117 | ``` |
| 118 | .claude/skills/ssh-skill/scripts |
| 119 | ``` |
| 120 | |
| 121 | **路径自动识别**:Python 的 `os.path.expanduser()` 会自动处理 `~`,无需手动替换。 |
| 122 | |
| 123 | ### 调用格式(唯一正确方式) |
| 124 | |
| 125 | **MUST**: 使用 `python ~/.claude/skills/ssh-skill/scripts/脚本名.py` 格式。使用别名(alias)标识服务器。 |
| 126 | |
| 127 | **NEVER**: 不要使用 `cd` 到脚本目录再执行,不要使用反斜杠 `\`,不要直接写 `ssh` 或 `scp` 命令。 |
| 128 | |
| 129 | ### 执行远程命令 |
| 130 | |
| 131 | ```bash |
| 132 | python ~/.claude/skills/ssh-skill/scripts/ssh_execute.py <别名> "<命令>" |
| 133 | ``` |
| 134 | |
| 135 | 可选参数:`--timeout <秒>` `--no-daemon` |
| 136 | |
| 137 | ssh_execute.py 会自动检测守护进程:有则走长连接(~0.12s),无则自动启动守护进程。 |
| 138 | |
| 139 | ### 上传文件 |
| 140 | |
| 141 | ```bash |
| 142 | MSYS_NO_PATHCONV=1 python ~/.claude/skills/ssh-skill/scripts/ssh_upload.py <别名> "<本地路径>" "<远程路径>" |
| 143 | ``` |
| 144 | |
| 145 | 可选参数:`--resume`(断点续传) `--recursive`(目录递归上传) `--no-progress`(禁用进度输出) |
| 146 | |
| 147 | ### 下载文件 |
| 148 | |
| 149 | ```bash |
| 150 | MSYS_NO_PATHCONV=1 python ~/.claude/skills/ssh-skill/scripts/ssh_download.py <别名> "<远程路径>" "<本地路径>" |
| 151 | ``` |
| 152 | |
| 153 | 可选参数:`--resume`(断点续传) `--recursive`(目录递归下载) `--no-progress`(禁用进度输出) |
| 154 | |
| 155 | **CRITICAL**: 上传/下载命令**必须**加 `MSYS_NO_PATHCONV=1` 前缀,防止 Windows MSYS bash 将远程路径(如 `/tmp/file`)转换为 Windows 路径。 |
| 156 | |
| 157 | ### 服务器间传输 |
| 158 | |
| 159 | ```bash |
| 160 | # 自动模式(推荐)- 根据文件大小和网络环境自动选择最优方式 |
| 161 | MSYS_NO_PATHCONV=1 python "~/.claude/skills/ssh-skill/scripts/ssh_server_transfer.py" <源别名> "<源路径>" <目标别名> "<目标路径>" |
| 162 | |
| 163 | # 强制直连模式(大文件推荐,数据直接在服务器间传输) |
| 164 | MSYS_NO_PATHCONV=1 python "~/.claude/skills/ssh-skill/scripts/ssh_server_transfer.py" <源别名> "<源路径>" <目标别名> "<目标路径>" --mode direct |
| 165 | |
| 166 | # 强制流式转发(小文件或服务器间网络不通时) |
| 167 | MSYS_NO_PATHCONV=1 python "~/.claude/skills/ssh-skill/scripts/ssh_server_transfer.py" <源别名> "<源路径>" <目标别名> "<目标路径>" --mode stream |
| 168 | |
| 169 | # 混合模式(先尝试直连,失败后自动降级到流式) |
| 170 | MSYS_NO_PATHCONV=1 python "~/.claude/skills/ssh-skill/scripts/ssh_server_transfer.py" <源别名> "<源路径>" <目标别名> "<目标路径>" --mode hybrid |
| 171 | |
| 172 | # 使用 rsync(仅直连模式,支持增量同步) |
| 173 | MSYS_NO_PATHCONV=1 python "~/.claude/skills/ssh-skill/scripts/ssh_server_transfer.py" <源别名> "<源路径>" <目标别名> "<目标路径>" --use-rsync |
| 174 | ``` |
| 175 | |
| 176 | 可选参数:`--mode <auto|direct|stream|hybrid>`(传输模式) `--use-rsync`(使用 rsync) `--no-progress`(禁用进度) `--size-threshold <MB>`(大小阈值,默认 10) `--timeout <秒>`(超时,默认 300) |
| 177 | |
| 178 | **传输模式说明:** |
| 179 | |
| 180 | | 模式 | 适用场景 | 数据流向 | 优点 | |
| 181 | |------|----------|----------|------| |
| 182 | | 直连 (direct) | 大文件、服务器间网络通 | 源服务器 → 目标服务器 | 速度快 |