Jeff-Blane/ssh-ops

GitHub: Jeff-Blane/ssh-ops

ssh-ops 是一个基于 fzf 和 OpenSSH 的单文件 ZSH 插件,将 ssh config 转化为支持模糊搜索、隧道管理和会话记录的交互式服务器选择器。

Stars: 0 | Forks: 0

# ssh-ops 这是一个单文件 ZSH 插件,能将你的 `~/.ssh/config` 变成交互式指挥中心。输入 `s`,选择服务器,即可连接。无需 GUI,无需凭据存储,无需云同步。仅仅是在 OpenSSH 之上使用了 `fzf`。 专为需要管理多台服务器的用户打造,尤其适合需要同时处理 C2 基础设施、扫描器、报告环境和测试工具的渗透测试人员和红队成员。 ## 安装说明 ``` git clone https://github.com/Jeff-Blane/ssh-ops.git cd ssh-ops chmod +x install.sh ./install.sh ``` 需要 `fzf` 和 ZSH。可选依赖:`tmux`、`bat`。 或手动安装: ``` mkdir -p ~/.ssh-ops ~/.ssh/logs cp ssh-ops.zsh ~/.ssh-ops/ echo 'source ~/.ssh-ops/ssh-ops.zsh' >> ~/.zshrc source ~/.zshrc ``` ## 工作原理 在你的 `~/.ssh/config` 中构建带有分组标题的结构: ``` # === OFFENSIVE OPS === Host c2-primary HostName 10.0.1.1 User operator Port 22 IdentityFile ~/.ssh/id_ed25519 LocalForward 9443 127.0.0.1:9443 Host phishing HostName 10.0.1.2 User root Port 22 IdentityFile ~/.ssh/id_ed25519 # === SCANNING === Host scanner HostName 10.0.2.1 User root Port 22 IdentityFile ~/.ssh/id_ed25519 LocalForward 3000 127.0.0.1:3000 # === INFRASTRUCTURE === Host reporting HostName 10.0.3.1 User admin Port 22 IdentityFile ~/.ssh/id_ed25519 ``` 输入 `s`,即可获得一个支持模糊搜索且已分类的服务器列表,并在预览窗格中显示高亮主机的配置块。 ## 命令 ### 交互式选择器 | 快捷键 | 模式 | 功能说明 | |------------|------|-------------| | `Enter` | Shell | 标准 SSH 连接 | | `Ctrl-S` | Strict | 禁用 agent forwarding。适用于在共享/不可信服务器上使用。 | | `Ctrl-W` | Tunnel | 激活 `LocalForward` 条目 + 自动打开浏览器 | | `Ctrl-T` | Tmux | 附加到(或创建)持久的 tmux 会话 | | `Ctrl-L` | Logged | 通过 `script(1)` 记录完整的终端输出 | | `Ctrl-A` | Status | 对所有服务器进行 TCP-ping,显示在线/离线状态 | ### 直接命令 | 命令 | 描述 | |---------|-------------| | `s` | 交互式选择器 | | `ss` | 检查所有服务器状态 | | `srun "uptime"` | 在每台服务器上运行命令 | | `srun "df -h" c2-primary` | 在单台服务器上运行命令 | | `sweb c2-primary` | 后台建立 tunnel + 打开浏览器 | | `slog c2-primary` | 开启会话日志记录进行连接 | | `st c2-primary` | SSH + 自动附加 tmux | | `sl` | 浏览已保存的会话日志 | | `slist` | 打印所有主机及其分组和 tunnel | | `sput host file /remote/path` | SCP 上传 | | `sget host /remote/file .` | SCP 下载 | ## Tunnel 模式 这是最节省时间的功能。大多数服务器端工具都有 Web UI:C2 面板、扫描器仪表盘、CRM、监控。无需手动运行 `ssh -L 9443:127.0.0.1:9443 c2-primary` 并打开浏览器,你只需: - 在选择器中:高亮选中主机,按下 `Ctrl-W` - 或在命令行中:`sweb c2-primary` ssh-ops 会从你的配置中读取 `LocalForward` 行,建立 tunnel,检测 HTTPS 端口(443、8443、9443),并打开浏览器。当你断开连接时,tunnel 会自动关闭。 ## 会话日志记录 在选择器中按下 `Ctrl-L`(或使用 `slog hostname`)即可使用系统 `script(1)` 命令记录完整的终端输出。日志将存放在 `~/.ssh/logs/` 中,格式如下: ``` hostname_YYYYMMDD_HHMMSS.log ``` 之后你可以使用 `sl` 浏览它们,该命令提供带预览功能的 fzf 选择界面。 ## 单次任务隔离 将 ssh-ops 指向专用的配置文件,即可将其范围限定在单个任务内: ``` export SSH_OPS_CONFIG="$HOME/.ssh/configs/engagement-acme" s ``` 避免连接到错误客户基础设施的风险。 ## 配置 在 `.zshrc` 中的 source 行之前设置以下内容: ``` export SSH_OPS_CONFIG="$HOME/.ssh/config" # SSH config path export SSH_OPS_LOG_DIR="$HOME/.ssh/logs" # Session log directory export SSH_OPS_TIMEOUT=5 # Status check timeout (seconds) export SSH_OPS_HEIGHT="60%" # fzf selector height export SSH_OPS_HEADER="SSH-OPS" # Selector header text export SSH_OPS_BROWSER="open" # Browser command (macOS: open) ``` ## 安全性 - **不存储任何数据。** 它仅仅是 OpenSSH 之上的 UI 层。密钥保留在 `~/.ssh/` 中,由 ssh-agent 管理。 - **无网络调用。** 仅读取本地文件并调用 `ssh`。仅此而已。 - **单一依赖。** fzf。一个没有运行时依赖的独立二进制文件。 - **Strict 模式。** Ctrl-S 禁用 agent forwarding。在连接到共享基础设施时使用此模式,可防止 agent 被劫持。 - **日志为本地明文。** 请像对待你的密钥一样谨慎处理 `~/.ssh/logs/`。 ## SSH 配置加固 既然你已经了解了相关知识: ``` Host * AddKeysToAgent yes UseKeychain yes IdentitiesOnly yes ServerAliveInterval 60 ServerAliveCountMax 3 StrictHostKeyChecking ask VerifyHostKeyDNS yes HashKnownHosts yes ``` 请将面向互联网的服务器上的 SSH 移出 22 端口,禁用密码认证,并考虑使用 `ipset` + `ufw` 进行 geo-IP 过滤,以拦截机器人流量。 ## 卸载 ``` chmod +x uninstall.sh && ./uninstall.sh ``` 移除插件及 `.zshrc` 中的条目。配置文件和日志保持不变。 ## 致谢 ## 开源协议 MIT
标签:SOC Prime, SSH, ZSH, 开发工具, 数据展示, 服务器管理, 红队