[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2220":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":15,"starSnapshotCount":15,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},2220,"sshops","Xiaoyun-0922\u002Fsshops","Xiaoyun-0922","Windows-first SSH bootstrap, diagnostics, transfer fallback, and remote ops toolkit for Linux and HPC workflows.",null,"Python",16,8,119,1,0,2.86,"MIT License",false,"main",[],"2026-06-12 02:00:38","# SSH Server Ops Toolkit\n\n![SSH Server Ops Toolkit 功能漫画](.\u002Fassets\u002Fsshops-hero.png)\n\n[![Validate](https:\u002F\u002Fgithub.com\u002FXiaoyun-0922\u002Fsshops\u002Factions\u002Fworkflows\u002Fvalidate.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FXiaoyun-0922\u002Fsshops\u002Factions\u002Fworkflows\u002Fvalidate.yml)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg)](.\u002FLICENSE)\n[![Platforms](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flocal-Windows%20%7C%20macOS%20%7C%20Linux-0F6CBD.svg)](#platforms)\n\n`sshops` 是一个跨平台 SSH 运维工具箱，用来做 SSH 诊断、密钥初始化、SSH config 修复、传输兜底和远程命令执行。它面向本地 Windows\u002FmacOS\u002FLinux 机器，远端目标通常是 Linux、POSIX 服务器、跳板机、堡垒机和 HPC 登录节点。\n\n它的核心原则很简单：在让人或 Agent 修改远端机器之前，先把 SSH 的最后一公里查清楚。\n\n\u003Ca id=\"toc\">\u003C\u002Fa>\n## 目录\n\n- [项目定位](#overview)\n- [一眼看懂](#quick-table)\n- [能解决什么问题](#problems)\n- [核心功能](#features)\n- [平台支持](#platforms)\n- [环境要求](#requirements)\n- [安装和验证](#install)\n- [快速开始](#quick-start)\n- [需要密码的流程](#password-flows)\n- [传输兜底](#transfer-fallback)\n- [Agent 和插件用法](#agent-usage)\n- [安全模型](#security-model)\n- [仓库结构](#repo-layout)\n- [路线图](#roadmap)\n\n\u003Ca id=\"overview\">\u003C\u002Fa>\n## 项目定位\n\n`sshops` 是工具优先、技能其次的仓库：\n\n- 人可以直接在终端运行脚本；\n- Codex 可以通过仓库内置插件和技能使用它；\n- Claude Code 可以通过插件布局或独立 skill 布局使用它。\n\n它不试图替代 SSH，而是把 SSH 常见失败拆成可检查的层：本地工具、网络链路、认证方式、SSH config、文件传输能力、Conda\u002FParamiko 兜底环境，以及 HPC\u002F跳板机场景里的额外限制。\n\n\u003Ca id=\"quick-table\">\u003C\u002Fa>\n## 一眼看懂\n\n| 你想做什么 | 命令 | 风险级别 |\n| --- | --- | --- |\n| 诊断本地 SSH、网络、认证和传输准备情况 | `doctor` | 只读 |\n| 创建或修复一个 `~\u002F.ssh\u002Fconfig` Host 配置块 | `configure` | 修改本地配置 |\n| 用一次密码会话安装公钥 | `bootstrap-key` | 修改远端账号配置 |\n| 在 OpenSSH 传输不稳定时复制文件 | `transfer` | 本地或远端文件写入 |\n| 用一致的 JSON 包装方式运行远程命令 | `run` | 取决于具体命令 |\n\n\u003Ca id=\"problems\">\u003C\u002Fa>\n## 能解决什么问题\n\n常见 SSH 失败很少只是“SSH 坏了”。`sshops` 会帮助你区分这些情况：\n\n- 本地 `ssh`、`scp`、`sftp` 缺失，或 PATH 上拿到的不是预期工具；\n- TCP 链路、VPN、防火墙、端口或跳板路径不通；\n- 交互式登录可用，但 `BatchMode` 公钥认证失败；\n- `ssh` 能登录，但 `scp` 或 `sftp` 传输不稳定；\n- `~\u002F.ssh\u002Fconfig` 里的 host、user、port、identity file 或认证策略写错；\n- 登录节点、跳板机、堡垒机、Slurm\u002FHPC 集群和普通服务器需要不同操作流程。\n\n\u003Ca id=\"features\">\u003C\u002Fa>\n## 核心功能\n\n### `doctor`：先诊断，后动手\n\n`doctor` 是推荐的第一步。它会输出 JSON 报告，包含 `local_tools`、`network`、`auth`、`transfer`、`python_env`、`likely_root_cause` 和 `recommended_next_step` 等字段，方便人和 Agent 都能基于证据行动。\n\n### `configure`：修复 SSH config\n\n`configure` 会写入或替换指定 alias 的 Host 配置块，避免手动编辑 `~\u002F.ssh\u002Fconfig` 时留下重复配置、错别字或错误密钥路径。\n\n### `bootstrap-key`：用一次密码会话安装公钥\n\n当远端暂时只能密码登录时，`bootstrap-key` 可以通过本地环境变量读取短期密码，安装公钥后再验证公钥登录。不要把密码、Token、私钥或 MFA 码粘贴到聊天窗口、README 或日志里。\n\n### `transfer`：传输失败时的 Paramiko 兜底\n\n优先使用原生 `scp` 或 `sftp`。当 OpenSSH 传输不可用或不稳定时，`transfer` 提供基于 Paramiko SFTP 的上传\u002F下载兜底路径。\n\n### `run`：可复现的远程命令执行\n\n`run` 用 OpenSSH 执行远程命令，可指定 alias、远程目录、Bash 包装和 BatchMode，适合先跑只读检查，再逐步执行更高风险操作。\n\n\u003Ca id=\"platforms\">\u003C\u002Fa>\n## 平台支持\n\n| 本地机器 | 推荐入口 | 说明 |\n| --- | --- | --- |\n| Windows | `powershell -ExecutionPolicy Bypass -File .\\scripts\\sshops.ps1 ...` | 保留 Windows 优先流程和 OpenSSH ACL 修复能力。 |\n| Windows | `python .\\scripts\\sshops.py ...` | 使用跨平台 Python CLI。 |\n| macOS | `python3 .\u002Fscripts\u002Fsshops.py ...` | 需要 PATH 上有 OpenSSH 客户端工具。 |\n| Linux | `python3 .\u002Fscripts\u002Fsshops.py ...` | 需要 PATH 上有 OpenSSH 客户端工具。 |\n\n远端目标预期是 Linux、POSIX、gateway、bastion 或 HPC 登录节点。本项目不是 Windows Remoting 或 RDP 工具箱。\n\n\u003Ca id=\"requirements\">\u003C\u002Fa>\n## 环境要求\n\n必需：\n\n- PATH 上存在 OpenSSH 客户端工具：`ssh`、`scp`、`sftp`；\n- Python 3.10 或更新版本，用于跨平台 CLI。\n\n可选：\n\n- Windows PowerShell 5.1+，或用于验证的 PowerShell Core；\n- `tar`，用于 tar-over-SSH 同步模式；\n- Conda 或其他带 `paramiko` 的 Python 环境，用于 `bootstrap-key` 和 `transfer`。\n\n\u003Ca id=\"install\">\u003C\u002Fa>\n## 安装和验证\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FXiaoyun-0922\u002Fsshops.git\ncd sshops\npython scripts\u002Fvalidate-toolkit.py\n```\n\nWindows 上也可以运行原始 PowerShell 验证器：\n\n```powershell\ngit clone https:\u002F\u002Fgithub.com\u002FXiaoyun-0922\u002Fsshops.git\ncd sshops\npowershell -ExecutionPolicy Bypass -File .\\scripts\\validate-toolkit.ps1\n```\n\n\u003Ca id=\"quick-start\">\u003C\u002Fa>\n## 快速开始\n\n### 1. 不保存 SSH config，先做诊断\n\nmacOS\u002FLinux：\n\n```bash\npython3 .\u002Fscripts\u002Fsshops.py doctor \\\n  --host-name login.example.edu \\\n  --port 22 \\\n  --user alice\n```\n\nWindows：\n\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\scripts\\sshops.ps1 doctor `\n  -HostName login.example.edu `\n  -Port 22 `\n  -User alice\n```\n\n### 2. 保存一个可复用 host alias\n\nmacOS\u002FLinux：\n\n```bash\npython3 .\u002Fscripts\u002Fsshops.py configure \\\n  --alias gpu-login \\\n  --host-name login.example.edu \\\n  --port 22 \\\n  --user alice \\\n  --identity-file ~\u002F.ssh\u002Fid_ed25519_gpu \\\n  --preferred-authentications publickey\n```\n\nWindows：\n\n```powershell\n$keyPath = Join-Path $HOME \".ssh\\id_ed25519_gpu\"\n\npowershell -ExecutionPolicy Bypass -File .\\scripts\\sshops.ps1 configure `\n  -Alias gpu-login `\n  -HostName login.example.edu `\n  -Port 22 `\n  -User alice `\n  -IdentityFile $keyPath `\n  -PreferredAuthentications publickey\n```\n\n### 3. 通过 alias 重新诊断\n\nmacOS\u002FLinux：\n\n```bash\npython3 .\u002Fscripts\u002Fsshops.py doctor --alias gpu-login\n```\n\nWindows：\n\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\scripts\\sshops.ps1 doctor -Alias gpu-login\n```\n\n### 4. 运行一个远程命令\n\nmacOS\u002FLinux：\n\n```bash\npython3 .\u002Fscripts\u002Fsshops.py run \\\n  --alias gpu-login \\\n  --remote-dir ~\u002Frepo \\\n  --command \"git status --short\" \\\n  --bash \\\n  --batch-mode\n```\n\nWindows：\n\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\scripts\\sshops.ps1 run `\n  -Alias gpu-login `\n  -RemoteDir ~\u002Frepo `\n  -Command \"git status --short\" `\n  -Bash `\n  -BatchMode\n```\n\n\u003Ca id=\"password-flows\">\u003C\u002Fa>\n## 需要密码的流程\n\n不要把密码、Token、私钥或 MFA 码写进聊天、仓库文件、prompt 模板或日志。对 `bootstrap-key` 和 `transfer`，把密码放在短期本地环境变量里，用完立即清除。\n\nmacOS\u002FLinux：\n\n```bash\nexport SSH_SERVER_PASSWORD=\"\u003Cset-locally-only>\"\npython3 -m pip install paramiko\npython3 .\u002Fscripts\u002Fsshops.py bootstrap-key \\\n  --host-name login.example.edu \\\n  --port 22 \\\n  --user alice \\\n  --public-key ~\u002F.ssh\u002Fid_ed25519_gpu.pub \\\n  --private-key ~\u002F.ssh\u002Fid_ed25519_gpu\nunset SSH_SERVER_PASSWORD\n```\n\nWindows with Conda：\n\n```powershell\nconda create -y -n sshops python=3.11\nconda run -n sshops python -m pip install paramiko\n\n$env:SSH_SERVER_PASSWORD = \"\u003Cset-locally-only>\"\npowershell -ExecutionPolicy Bypass -File .\\scripts\\sshops.ps1 bootstrap-key `\n  -HostName login.example.edu `\n  -Port 22 `\n  -User alice `\n  -PublicKey \"$HOME\\.ssh\\id_ed25519_gpu.pub\" `\n  -PrivateKey \"$HOME\\.ssh\\id_ed25519_gpu\" `\n  -CondaEnv sshops\nRemove-Item Env:SSH_SERVER_PASSWORD\n```\n\n\u003Ca id=\"transfer-fallback\">\u003C\u002Fa>\n## 传输兜底\n\n当 OpenSSH 传输健康时，优先直接使用 `scp` 或 `sftp`。当密码支持的 Paramiko SFTP 更稳定时，再使用 `transfer`。\n\nmacOS\u002FLinux：\n\n```bash\nexport SSH_SERVER_PASSWORD=\"\u003Cset-locally-only>\"\npython3 .\u002Fscripts\u002Fsshops.py transfer \\\n  --host-name login.example.edu \\\n  --port 22 \\\n  --user alice \\\n  --direction download \\\n  --remote-path \u002Fpath\u002Fon\u002Fremote \\\n  --local-path .\u002Flocal-copy\nunset SSH_SERVER_PASSWORD\n```\n\nWindows：\n\n```powershell\n$env:SSH_SERVER_PASSWORD = \"\u003Cset-locally-only>\"\npowershell -ExecutionPolicy Bypass -File .\\scripts\\sshops.ps1 transfer `\n  -HostName login.example.edu `\n  -Port 22 `\n  -User alice `\n  -Direction download `\n  -RemotePath \u002Fpath\u002Fon\u002Fremote `\n  -LocalPath .\\local-copy `\n  -CondaEnv sshops\nRemove-Item Env:SSH_SERVER_PASSWORD\n```\n\n\u003Ca id=\"agent-usage\">\u003C\u002Fa>\n## Agent 和插件用法\n\n本仓库包含：\n\n- Codex 插件元数据：[`.codex-plugin\u002Fplugin.json`](.\u002F.codex-plugin\u002Fplugin.json)；\n- Claude 插件元数据：[`.claude-plugin\u002Fplugin.json`](.\u002F.claude-plugin\u002Fplugin.json)；\n- 标准 skill 布局：[`skills\u002Fssh-server-ops\u002F`](.\u002Fskills\u002Fssh-server-ops\u002F)；\n- 根目录独立技能文件：[`SKILL.md`](.\u002FSKILL.md)。\n\n安装时建议安装整个仓库或插件，不要只复制 `skills\u002Fssh-server-ops\u002F`。该 skill 依赖仓库根目录下的 `scripts\u002F` 和 `references\u002F`。\n\n示例 prompt：\n\n```text\nUse $ssh-server-ops to run a read-only diagnosis on my HPC login node and recommend the next safe action.\n```\n\n\u003Ca id=\"security-model\">\u003C\u002Fa>\n## 安全模型\n\n- 优先运行 `doctor`，因为它是只读诊断；\n- 不要把密码存进 `~\u002F.ssh\u002Fconfig`、仓库文件、prompt 模板或日志；\n- 通过 `SSH_SERVER_PASSWORD` 把密码限制在本地短期终端会话里；\n- 删除、重置、覆盖、重启、安装软件和影响生产环境的命令，都应视为需要明确批准的操作；\n- 在 HPC 系统上，先区分登录节点、计算节点、调度器分配和共享存储，再决定下一步。\n\n发布和密钥处理检查清单见 [SECURITY.md](.\u002FSECURITY.md)。\n\n\u003Ca id=\"repo-layout\">\u003C\u002Fa>\n## 仓库结构\n\n```text\n.\n|-- .claude-plugin\u002F\n|   |-- marketplace.json\n|   `-- plugin.json\n|-- .codex-plugin\u002F\n|   `-- plugin.json\n|-- .github\u002F\n|   `-- workflows\u002F\n|       `-- validate.yml\n|-- agents\u002F\n|   `-- openai.yaml\n|-- assets\u002F\n|   `-- sshops-hero.png\n|-- references\u002F\n|   |-- hpc-slurm-playbook.md\n|   |-- prompt-templates.md\n|   `-- windows-linux-ssh-playbook.md\n|-- scripts\u002F\n|   |-- bootstrap_ssh_key.py\n|   |-- configure_ssh_host.ps1\n|   |-- paramiko_copy_tree.py\n|   |-- remote_run.ps1\n|   |-- server_preflight.ps1\n|   |-- sshops.py\n|   |-- sshops.ps1\n|   |-- validate-toolkit.py\n|   `-- validate-toolkit.ps1\n|-- skills\u002F\n|   `-- ssh-server-ops\u002F\n|       |-- SKILL.md\n|       `-- agents\u002F\n|           `-- openai.yaml\n|-- tests\u002F\n|   `-- test_sshops_cli.py\n|-- README.md\n|-- SECURITY.md\n|-- SKILL.md\n`-- LICENSE\n```\n\n\u003Ca id=\"roadmap\">\u003C\u002Fa>\n## 路线图\n\n- 在 `doctor` 中加入更完整的 `scp` 和 `sftp` 探针；\n- 更明确地报告传输兜底路径；\n- 增加 tar-over-SSH 同步助手；\n- 为 `transfer` 增加校验和、重试和 dry-run 支持；\n- 增加专门的 HPC 子命令，而不仅是 playbook 指南；\n- 发布可安装的 `sshops` CLI 包。\n","`sshops` 是一个专为 Windows 用户设计的 SSH 运维工具箱，支持跨平台使用，旨在简化 Linux 和 HPC 工作流中的 SSH 诊断、密钥初始化、配置修复、文件传输和远程命令执行。其核心功能包括通过 `doctor` 命令进行本地与网络环境的全面检查，`configure` 自动化生成或更新 SSH 配置文件，`bootstrap-key` 在仅密码登录可用时安装公钥，以及当标准 OpenSSH 传输不可靠时启用基于 Paramiko 的文件传输备用方案。此外，`run` 命令允许用户以一致的方式执行远程命令。此工具非常适合需要频繁通过 SSH 访问远程服务器，尤其是遇到复杂网络条件如需通过跳板机或堡垒机连接的情况下的开发人员和运维工程师。",2,"2026-06-11 02:48:55","CREATED_QUERY"]