关于 gen-ssh-key
通过团队标准脚本生成 SSH 密钥的技能,统一密钥类型、命名、权限和覆盖保护。适合需要按服务生成密钥并安全处理私钥的用户。
主要功能
- 01默认使用 Ed25519,可选 RSA 4096
- 02按服务命名密钥文件
- 03设置私钥和目录权限
- 04默认拒绝覆盖,可用强制选项
- 05支持 JSON 输出和试运行
适用场景
- 01为指定服务创建密钥对
- 02按需生成 RSA 4096 密钥
- 03将密钥保存到指定目录
- 04获取机器可读的生成结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ chinayin/ coding-skillhub --skill gen-ssh-key安装后在 Claude Code 中输入/gen-ssh-key确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.env.exampletest.shevals/evals.jsonscripts/gen-ssh-key.sh详细介绍
生成 SSH 密钥(团队标准)
运行一个脚本来生成符合标准的 SSH 密钥;不要手动拼写 ssh-keygen 命令。脚本内置了团队规则(密钥类型、命名、 权限、覆盖保护),因此使用该脚本才能确保符合规范。
工作流
-
根据用户提到的服务或用途确定
<name>(例如 “jumpserver”、“gitlab”)。使用 kebab-case;不含空格或斜杠。 -
根据请求选择标志:
- 明确要求 RSA:添加
--rsa(始终使用 RSA 4096;脚本 会拒绝生成 RSA 2048,因为团队禁止使用强度过低的密钥)。 - 需要密码短语:将密码短语写入临时文件,传入
--passphrase-file <file>,然后删除该文件。切勿将 密码短语放在命令行中。 - 需要机器可读的结果(或由其他程序使用):添加
--json(stdout 仅输出纯 JSON;诊断信息写入 stderr)。 - 用户指定了目标位置:添加
--out-dir <dir>(可以是 当前目录,例如--out-dir .),密钥会直接写入该位置。 否则,如果既未设置--out-dir,也未设置技能的.env中的SSH_KEY_OUTPUT_DIR,密钥将写入默认目录~/.ssh/generated-keys。
- 明确要求 RSA:添加
-
从技能目录运行脚本:
./scripts/gen-ssh-key.sh <name> [flags] -
向用户反馈:提供公钥内容(可以安全分享)和文件路径。切勿打印、引用或 传输私钥内容,也切勿将密码短语写入结果或日志——JSON 输出会有意仅包含
passphrase_protected: true。
如果目标文件已存在,脚本会拒绝执行;重试时使用 --force 前先询问用户。
示例
./scripts/gen-ssh-key.sh jumpserver # Ed25519 -> jumpserver.{ppk,pem,pub}
./scripts/gen-ssh-key.sh gitlab --rsa # RSA 4096
./scripts/gen-ssh-key.sh svc-x --passphrase-file ./pp.txt --json
./scripts/gen-ssh-key.sh jumpserver --out-dir ~/.ssh/generated-keys
./scripts/gen-ssh-key.sh jumpserver --comment "[email protected]"
./scripts/gen-ssh-key.sh jumpserver --dry-run # show the plan only
./scripts/gen-ssh-key.sh --tool ssh-keygen jumpserver # skip puttygen
./scripts/gen-ssh-key.sh -h # full flag reference
脚本内置的团队规则
- 密钥类型:默认使用 Ed25519;
--rsa表示 RSA 4096;绝不使用 RSA 2048。 - 工具:优先使用 puttygen(为 PuTTY 用户添加
.ppk);否则使用 ssh-keygen。 - 命名:
<name>.ppk / .pem / .pub,以便按服务识别密钥。 - 注释
-C默认为<name>;使用--comment覆盖。 - 私钥执行
chmod 600;新建输出目录执行chmod 700。 - 默认拒绝覆盖;必须使用
--force。
配置
输出目录优先级:--out-dir > .env 中的 SSH_KEY_OUTPUT_DIR
(位于技能根目录,即 scripts/ 的上一级目录)> 内置默认目录
~/.ssh/generated-keys。如果既未设置 --out-dir,也没有 .env,密钥会写入
该默认目录,而非当前目录(因此不会悄然写入技能目录);如果确实要使用当前
目录,请传入 --out-dir .。如需永久更改默认目录,请在技能根目录执行
cp .env.example .env,并将 SSH_KEY_OUTPUT_DIR 指向其他位置。
生成文件
| 文件 | 用途 |
|---|---|
<name>.ppk | PuTTY 原生密钥(仅 puttygen 路径会生成) |
<name>.pem | OpenSSH 私钥(chmod 600,请妥善保密) |
<name>.pub | OpenSSH 公钥(可分享;用于导入 / authorized_keys) |
退出代码
0 成功;1 参数错误、目标已存在或生成失败;2 没有可用工具(未安装 puttygen 和 ssh-keygen)。