🔑 震惊!90%的运维工程师竟然不会正确生成SSH密钥?10年老司机手把手教你避坑!
引言
兄弟们,今天咱们来聊聊SSH密钥生成这个看似简单实则暗藏玄机的话题。说实话,我刚入行那会儿,也觉得这玩意儿不就是个ssh-keygen
命令的事儿吗?直到有次线上服务器被黑,排查后发现是因为密钥生成不当导致的,这才意识到问题的严重性!
作为一个在Linux运维圈摸爬滚打10多年的老油条,今天我就把SSH密钥生成的正确姿势、常见误区以及高级用法,统统毫无保留地分享给大家。相信我,看完这篇文章,你对SSH密钥的理解会上升不止一个level!
名词解释
SSH (Secure Shell)
SSH是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。它通过在客户端和服务器之间建立加密隧道来实现安全通信。
非对称加密
SSH密钥使用的是非对称加密体系,包含一对密钥:
- 私钥(Private Key):必须严格保密,相当于你的"数字身份证"
- 公钥(Public Key):可以自由分发,用于验证私钥持有者的身份
密钥对类型
常见的SSH密钥对类型有:
- RSA (传统且广泛支持)
- ECDSA (基于椭圆曲线,更安全高效)
- Ed25519 (目前最先进的算法)
参数解释
ssh-keygen
命令的主要参数:
| 参数 | 说明 | 推荐值 |
|------|------|--------|
| -t | 指定密钥类型 | rsa/ecdsa/ed25519 |
| -b | 指定密钥位数 | RSA建议4096,ECDSA建议521 |
| -C | 添加注释 | 通常用邮箱作为标识 |
| -f | 指定密钥文件路径 | ~/.ssh/id_rsa |
| -N | 设置密钥密码 | 建议设置强密码 |
| -o | 使用新OpenSSH格式 | 增强安全性 |
| -a | KDF迭代次数 | 建议100以上增强安全性 |
环境
本文演示环境:
- 操作系统:Ubuntu 22.04 LTS
- SSH版本:OpenSSH 8.9p1
- Shell环境:bash 5.1.16
举例子
基础示例:生成RSA密钥
# 生成4096位的RSA密钥对(这是目前最安全的RSA配置)
ssh-keygen -t rsa -b 4096 -o -a 100 -C “your_email@example.com”
# 执行后会提示以下信息(交互式操作):
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): # 直接回车使用默认路径
Enter passphrase (empty for no passphrase): # 建议输入强密码
Enter same passphrase again: # 再次确认密码
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
高级示例:生成Ed25519密钥
# Ed25519是目前最推荐的算法,更安全且性能更好
ssh-keygen -t ed25519 -a 100 -C “your_email@example.com”
# 验证密钥指纹(重要!首次连接服务器时核对)
ssh-keygen -l -f ~/.ssh/id_ed25519
密钥管理最佳实践
- 设置正确的文件权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_* # 私钥必须设为600
chmod 644 ~/.ssh/*.pub # 公钥可以宽松些
- 配置ssh-agent自动管理密钥:
# 启动ssh-agent
eval “$(ssh-agent -s)”
# 添加密钥到agent(需要输入密码)
ssh-add ~/.ssh/id_ed25519
# 查看已加载的密钥
ssh-add -l
- 多密钥管理:
# 创建config文件管理不同主机的密钥
vim ~/.ssh/config
# 示例内容:
Host github.com
HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github IdentitiesOnly yes
Host production-server
HostName 192.168.1.100 User root IdentityFile ~/.ssh/id_rsa_production Port 2222
服务器端配置
- 将公钥部署到服务器:
# 简单方法(需要密码登录)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostname
# 手动方法(将.pub文件内容追加到服务器的~/.ssh/authorized_keys)
cat ~/.ssh/id_ed25519.pub | ssh user@hostname “mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys”
- 加固服务器SSH配置:
# 编辑/etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config
# 关键安全设置:
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用密钥认证
PermitRootLogin no # 禁止root直接登录
AllowUsers your_username # 只允许特定用户登录
常见问题解决方案
问题1:密钥权限太开放导致被拒绝
错误信息:
Permissions 0644 for ‘/home/user/.ssh/id_rsa’ are too open.
It is required that your private key files are NOT accessible by others.
解决方案:
chmod 600 ~/.ssh/id_rsa
问题2:忘记密钥密码怎么办?
警告:没有官方方法恢复,但可以:
- 如果有备份的未加密私钥,使用那个
- 如果没有,只能生成新密钥对并重新部署
预防措施:
- 使用密码管理器保存密钥密码
- 在安全的地方备份未加密的私钥(如加密的USB驱动器)
问题3:如何测试密钥是否正常工作?
# 使用-v参数查看详细连接过程
ssh -v user@hostname
# 指定特定密钥测试
ssh -i ~/.ssh/id_ed25519 -v user@hostname
总结
SSH密钥生成看似简单,但里面的门道可不少。通过本文,你应该掌握了:
- 如何生成安全的SSH密钥对(推荐使用Ed25519算法)
- 密钥管理的最佳实践(权限设置、ssh-agent使用等)
- 多密钥环境下的高效管理方法
- 常见问题的解决方案
记住,安全无小事!一个配置不当的SSH密钥可能就是黑客入侵的突破口。所以,赶紧检查下你的密钥配置是否符合安全规范吧!
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取
读者福利 |
优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
读者福利 |
优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)