用一杯咖啡的时间,把 SSH 管理这件小事做到极致
“为什么别人的终端永远比你快半拍?”——答案往往藏在看不见的细节里。
一、SSH 管理到底在折腾什么?
1.1 先弄清三个日常场景
场景 | 当前做法 | 痛点 |
---|---|---|
刚入职,领导甩来 30 台服务器账号 | 一条条往 ~/.ssh/config 里手抄 |
抄错一个字母,连不上还得重来 |
凌晨两点紧急修 bug | 在终端里 grep 半天找主机名 |
眼皮打架,手抖把生产连成测试 |
团队共享堡垒机 | 把 ProxyJump 参数记在记事本 | 每次复制粘贴,格式还容易乱 |
一句话总结:SSH 配置一旦超过 10 行,人就很难靠记忆不出错。
二、SSHM 是什么?一句话说清
SSHM 是一个用 Go 写的命令行小工具,只做一件事:
把你的 ~/.ssh/config
变成一张可搜索、可排序、可交互的“主机名片夹”。
-
不写一行配置就能用 -
不改现有 SSH 习惯 -
支持 Linux、macOS、Windows
三、三分钟完成安装
3.1 Linux / macOS:一条命令
curl -sSL https://raw.githubusercontent.com/Gu1llaum-3/sshm/main/install/unix.sh | bash
脚本做的事:
-
自动识别 CPU 架构 -
下载对应二进制 -
放到 /usr/local/bin
并赋可执行权限
3.2 Windows:一行 PowerShell
irm https://raw.githubusercontent.com/Gu1llaum-3/sshm/main/install/windows.ps1 | iex
装完后在任意目录输入 sshm
,出现界面即成功。
四、第一次启动:零配置也能用
打开终端,敲:
sshm
你会看到类似下面的界面(示例):
┌─SSH Hosts────────────────────┐
│ web-prod-01 │
│ db-dev │
│ backend-prod │
└──────────────────────────────┘
如果你的
~/.ssh/config
已经有主机,它们会自动出现;如果没有,SSHM 会提示你添加第一台。
五、核心操作图解
5.1 新增主机(Add)
-
按 a
-
填写表单(回车跳下一项) -
Hostname/IP -
User -
Port(默认 22) -
IdentityFile(私钥路径) -
ProxyJump(可选) -
Tags(逗号分隔,如 production,web
)
-
-
Ctrl+s 保存,SSHM 自动写回 ~/.ssh/config
5.2 编辑主机(Edit)
-
↑↓ 选中主机 -
按 e
-
修改任何字段 -
Ctrl+s 保存
5.3 删除主机(Delete)
-
选中主机 -
按 d
-
输入 yes
确认
5.4 连接主机(Connect)
-
选中主机 -
回车 -
SSH 会话直接弹出,无需再输密码(如果你本机已配置密钥)
六、标签与搜索:当主机多到 100+ 台
6.1 标签示例
# Tags: production, web, frontend
Host web-prod-01
HostName 192.168.1.10
...
-
生产、测试、数据库、前端、后端……随你定义 -
支持多标签,逗号分隔即可
6.2 搜索
-
/
进入搜索框 -
输入 prod
立即过滤出所有含 “prod” 的主机 -
Tab 键切换“按名称”或“按最近登录”排序
七、命令行模式:脚本化场景
任务 | 命令 | 场景示例 |
---|---|---|
非交互添加 | sshm add api-prod |
CI/CD 里动态注入主机 |
指定配置 | sshm -c /opt/ssh/config |
多项目隔离配置 |
编辑特定主机 | sshm edit jump-box |
一键改跳板机端口 |
八、配置长什么样?一张图看懂
SSHM 不发明新格式,只在你现有
~/.ssh/config
上加两行注释。
# Tags: production, web, frontend
Host web-prod-01
HostName 192.168.1.10
User deploy
Port 22
IdentityFile ~/.ssh/production_key
Compression yes
ServerAliveInterval 60
-
第一行 # Tags:
是 SSHM 的额外元数据 -
其余都是标准 SSH 语法,任何工具都能继续用
九、常见问题(FAQ)
Q1:我已经有 200 行旧配置,会不会被 SSHM 弄乱?
A:不会。SSHM 只在修改时自动备份为 ~/.ssh/config.bak
,可随时回滚。
Q2:Windows 用户没有 ~/.ssh/config
怎么办?
A:SSHM 会自动在 %USERPROFILE%\.ssh\config
创建文件,无需手动建目录。
Q3:ProxyJump 填什么格式?
A:与原生 SSH 一致,如 user@bastion:2222
。
Q4:如何给同一台主机配多个密钥?
A:在“SSH Options”里填 -o IdentityFile=~/.ssh/key2
,SSHM 会自动展开成多行。
十、进阶技巧:把 SSHM 塞进工作流
10.1 与 Ansible 联动
# 用 SSHM 搜到主机名,复制后直接
ansible-playbook -i web-prod-01, deploy.yml
10.2 与 tmux 分屏
# 一键开三台机
sshm # 选中 web-01 → Ctrl+b+" → 垂直分屏
sshm # 选中 web-02 → Ctrl+b+% → 水平分屏
10.3 在 CI 中自动添加主机
# GitHub Actions 片段
- name: Add staging host
run: |
sshm add staging \
--hostname ${{ secrets.STAGE_IP }} \
--user deploy \
--identity-file ~/.ssh/stage_key
十一、源码快速走读(给好奇的你)
sshm/
├── cmd/ # 入口命令,用 Cobra 解析
├── internal/
│ ├── config/ # 解析你的 ~/.ssh/config
│ ├── ui/ # Bubble Tea 做的 TUI
│ └── history/ # 记录最后一次登录时间
-
单文件二进制,无运行时依赖 -
所有改动都会先写 .bak
再覆盖原文件,保证安全
十二、版本与下载地址
平台 | 文件名 | 一键下载 |
---|---|---|
Linux x86_64 | sshm-linux-amd64.tar.gz | GitHub Latest |
macOS Intel | sshm-darwin-amd64.tar.gz | GitHub Latest |
Windows | sshm-windows-amd64.zip | GitHub Latest |
十三、写在最后
SSHM 不打算替代你的 SSH 客户端,它只是帮你把“找主机”这一步缩短到 1 秒。
当你不再需要翻记事本、查 Wiki、问同事,就能把时间留给真正重要的事情——写代码、修 bug、陪家人。
祝你连接顺利。