玩服务器、Git、Linux 开发的小伙伴,一定对 SSH 登录不陌生。每次远程连接服务器都输入密码,不仅麻烦,还存在密码泄露、暴力破解的安全风险。
而 ssh-keygen 就是解决这个问题的核心工具!它是 SSH 协议的密钥生成工具,一键生成公私钥对,实现服务器、Git 仓库的免密登录,同时大幅提升远程连接的安全性。
今天这篇博文,从零带你吃透 ssh-keygen,包含原理、常用命令、实操步骤、避坑技巧,新手也能直接上手!
一、什么是 ssh-keygen?核心原理科普
ssh-keygen 是 OpenSSH 自带的密钥生成命令,无需额外安装,Linux、Mac、Windows 10+ 系统原生支持。
它的核心作用是 生成非对称加密密钥对,包含两个文件:
- 私钥(id_xxx):相当于你的「私人钥匙」,绝对不能泄露、不能外传,保存在本地电脑
- 公钥(id_xxx.pub):相当于「锁」,可以公开分发,上传到服务器/Git 仓库
免密登录原理:
本地持有私钥,远程服务器存储你的公钥。连接时,双方通过密钥加密校验,匹配成功即可直接登录,无需输入密码,安全又高效。
二、默认密钥生成(零基础快速上手)
最简单的用法,直接在终端输入命令,全程回车默认配置,适合绝大多数场景:
ssh-keygen
执行后会出现 3 次交互提问,直接回车全部默认即可:
1. 密钥存储路径
默认路径:~/.ssh/id_rsa,无需修改,回车跳过
2. 密钥密码(重点)
可设置密钥独立密码(区别于服务器登录密码),日常本地使用直接回车留空,实现真正免密;如果是多人共用设备,建议设置密码提升安全性。
3. 确认密码
再次回车确认,等待 1 秒即可生成完成。
生成成功后,~/.ssh 目录会出现两个核心文件:
id_rsa:私钥(权限 600,系统自动保护)id_rsa.pub:公钥(可公开)
三、ssh-keygen 高频实用参数(进阶必备)
默认命令满足基础需求,工作中我们常需要自定义密钥类型、备注、有效期,以下参数是高频刚需,建议收藏!
1. -t:指定加密算法(最常用)
默认生成 RSA 算法密钥,推荐使用更安全的 ed25519 算法(安全性更高、密钥更短、速度更快):
# 生成 ed25519 安全密钥(推荐!)
ssh-keygen -t ed25519
# 传统 RSA 密钥(兼容老旧服务器)
ssh-keygen -t rsa
2. -C:添加密钥备注(区分多账号)
一台电脑配置多个 Git 账号、多台服务器时,备注可以精准区分密钥归属,格式一般用邮箱:
ssh-keygen -t ed25519 -C "your@email.com"
3. -f:自定义密钥存储路径/文件名
避免默认密钥覆盖,自定义密钥名称,适配多密钥场景:
# 生成命名为 server-key 的密钥对
ssh-keygen -t ed25519 -C "server@test.com" -f ~/.ssh/server-key
4. -N:免交互设置密钥密码
适合脚本自动化部署,无需手动回车输入密码:
# 设置密钥密码为 123456(生产环境不建议明文)
ssh-keygen -t ed25519 -N "123456"
5. -R:清除旧密钥缓存(解决连接报错)
服务器重装、IP 复用后,本地缓存的旧密钥会导致 Host key verification failed 报错,执行以下命令清除缓存即可:
ssh-keygen -R 服务器IP/域名
四、实操:实现服务器 SSH 免密登录
生成密钥对后,只需把 公钥 上传到远程服务器,即可实现免密登录,两种方式任选其一:
方式 1:一键自动上传(简单高效)
ssh-copy-id 用户名@服务器IP
执行后输入一次服务器密码,系统会自动将公钥写入服务器 ~/.ssh/authorized_keys 文件,配置完成。
方式 2:手动配置(适配无 ssh-copy-id 环境)
- 本地查看并复制公钥内容:
cat ~/.ssh/id_ed25519.pub - 登录远程服务器,创建密钥目录:
mkdir -p ~/.ssh - 将复制的公钥内容写入授权文件:
echo "公钥内容" >> ~/.ssh/authorized_keys - 设置权限(必须配置,否则免密失效):
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
配置完成后,再次 SSH 连接服务器,无需输入密码,直接登录成功!
五、常见问题 & 避坑指南
1. 免密配置完成后仍然需要输入密码?
90% 是 文件权限错误 导致的!SSH 对密钥文件权限极其严格,必须执行权限命令:
# 本地权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
# 服务器端权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2. 提示 Host key verification failed
服务器密钥变更,本地缓存未更新,执行清除命令:ssh-keygen -R 服务器IP,重新连接即可。
3. 多密钥冲突,默认不调用指定密钥?
自定义密钥后,通过 config 文件指定对应服务器使用的密钥,在本地 ~/.ssh/config 配置:
Host 自定义别名
HostName 服务器IP
User 用户名
IdentityFile ~/.ssh/自定义私钥路径
六、总结
ssh-keygen 是运维、开发必备的基础工具,核心价值就是 安全、高效、自动化:
- 替代密码登录,杜绝暴力破解风险
- 适配服务器远程连接、Github/Gitee 免密拉推代码
- 支持自动化部署、脚本批量运维
日常使用优先推荐 ssh-keygen -t ed25519 -C "备注" 命令,兼顾安全性和兼容性,一次配置、永久受用!