本文针对 OpenSSH 的常见客户端接口;可用选项以所安装版本的手册为准。用户配置通常在
~/.ssh/。
ssh-keygen:生成与查看密钥#
# 生成 ed25519 密钥对(-t 类型 / -C 注释 / -f 输出路径)
ssh-keygen -t ed25519 -C "user@workstation" -f ~/.ssh/id_ed25519
# 查看公钥指纹(-l 指纹 / -E sha256 指定哈希 / -lf 对文件)
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 查看私钥对应的公钥(-y:读私钥输出公钥)
ssh-keygen -y -f ~/.ssh/id_ed25519
# 加 / 改 passphrase(-p;会先问旧密码,改/加用这个)
ssh-keygen -p -f ~/.ssh/id_ed25519生成时的 passphrase 提示 生成新 key 时
ssh-keygen会问Enter passphrase——直接回车 = 无锁裸钥,输入 = 加锁。建议输入。
ssh-add:操作 agent 里的密钥#
ssh-add -l # 列出 agent 已加载的 key(含指纹)
ssh-add ~/.ssh/id_ed25519 # 把某个私钥加进 agent
ssh-add -d ~/.ssh/id_ed25519 # 移除某把
ssh-add -D # 清空 agent(全部移除)先确认 SSH_AUTH_SOCK 指向可用 agent,再用 ssh-add -l 检查已加载密钥。桌面可能提供 gcr 等集成;自动加载不是所有会话的保证。
连接与调试#
# 测试 GitHub 连接(-T 禁止分配伪终端;GitHub 不提供 shell;正常返回 "Hi <用户>!")
ssh -T git@github.com
# 试解析配置(-G:显示某个 Host 生效的配置项,验证 config 写没写对)
ssh -G github.com
# 调试连接(-v 详细 / -vv 更详细,看认证过程)
ssh -v git@github.com
# 指定私钥连接(-i)
ssh -i ~/.ssh/id_ed25519 user@server.example.com判断「加没加锁」的实测方法
ssh-keygen -y -f ~/.ssh/id_ed25519—— 能直接输出公钥 = 裸钥;卡住要输密码 = 已加锁。
客户端配置:GitHub 与通用开发机#
~/.ssh/config:
windows 的 config 在 $HOME.ssh/config
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes # 限制为配置身份,而非 agent 中所有身份
Host dev-server
HostName server.example.com # 替换为已核对的服务器地址
User user # 替换为远端账户
Host *
IdentityFile ~/.ssh/id_ed25519 # 默认私钥;多个 IdentityFile 会累积
AddKeysToAgent yes # 已有 agent 时自动添加从文件加载的密钥
ServerAliveInterval 60 # 协议保活;不保证网络永不掉线
StrictHostKeyChecking ask # 新主机先核对指纹再确认日常流程:
# git push/pull(远端使用 GitHub SSH URL 时走相应 Host 配置)
git push origin main
# 通用开发机(先配置实际地址与账户并核对主机指纹)
ssh dev-serverconfig 权限
chmod 600 ~/.ssh/config是常见保守设置,并非唯一允许值。用户配置必须遵守 OpenSSH 的所有者与写权限要求;不合规可能直接报错。对由声明式配置管理的文件,应在配置源中处理权限。
相关#
- 概念:SSH 认证体系
- agent 与 passphrase → ssh-agent、passphrase 与 keyring
- 参考:ssh-keygen man | ssh config man
具体 Host 块放在通用默认块之前,因为多数配置项采用首先取得的值;IdentityFile 等允许多值的项会累积。GitHub 认证成功时会提示不提供 shell,并通常退出码为 1,因此不能仅凭非零退出码判为认证失败。首次连接先与官方指纹或可信控制台核对;主机密钥发生变化时,先查明原因,不要直接禁用校验。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。