ssh密钥不支持磁盘级加密,但可通过口令加密私钥内容、严格设置文件权限(私钥600、~/.ssh目录700)、配合ssh-agent内存管理实现等效强制保护;口令须在生成时用ssh-keygen -t ed25519 -a 100设定,推荐4–6词随机英文组合,空口令即裸奔。

SSH 密钥本身不支持“磁盘加密存储”,但可通过口令(passphrase)加密私钥内容,配合严格权限控制和内存代理管理,实现等效的强制保护效果。核心不是把文件锁进保险柜,而是让私钥即使被复制也无法直接使用。
给私钥加口令是必须的第一步
生成密钥时务必设置口令,不能留空——这是最基础、最有效的防护层:
- 推荐命令:
ssh-keygen -t ed25519 -a 100 -C "your_email@example.com",其中-a 100指定密钥派生轮数,增强抗暴力破解能力 - 口令建议用 4–6 个随机英文单词组合(如 drift-kiwi-pulse-weld),比复杂符号密码更易记、抗爆破更强
- 口令在生成时设定,之后无法追加;若漏填,只能重生成密钥对,并同步更新服务器端
authorized_keys - 空口令 = 私钥裸奔,文件一旦被拷走,攻击者可立即用于登录或签名
权限控制是硬性拦截机制
OpenSSH 会主动拒绝加载权限过松的私钥文件,这不是建议,而是强制校验:
- 私钥文件(如
id_ed25519)权限必须为 600:chmod 600 ~/.ssh/id_ed25519 -
~/.ssh目录权限必须为 700:chmod 700 ~/.ssh -
authorized_keys文件建议设为 600,防止他人篡改可登录公钥列表 - 切勿用
sudo chmod,否则可能将文件所有者变成 root,导致当前用户无法读取
用 ssh-agent 管理解密句柄,避免反复输口令
ssh-agent 不存储加密私钥,而是缓存已解密的密钥句柄,只驻留内存、不写磁盘、退出终端即失效:
- 启动 agent:
eval $(ssh-agent -s) - 添加私钥(会提示输入一次口令):
ssh-add ~/.ssh/id_ed25519 - 查看已加载:
ssh-add -l;清空全部:ssh-add -D - 脚本或 CI/CD 场景若需免交互,应禁用口令,但必须将私钥严格限定在受控环境(如 Kubernetes Secret 或 Jenkins 凭据库),不可落地到普通磁盘路径
不推荐第三方“加密存储”工具
GNOME Keyring、KeePassXC 插件等额外引入依赖和兼容风险:
- 桌面环境外(如远程 SSH 终端、tmux、CI 流水线)常无法调用 Keyring
- 配置错误可能导致私钥以明文形式被缓存、记录日志或暴露在进程参数中
- 原生方案(口令 + 权限 + agent)已足够安全,且审计清晰、行为可预测











