第147集:SSH 密钥管理
教学目标
- 理解SSH密钥认证的基本原理
- 掌握SSH密钥对的生成方法
- 学会配置SSH密钥认证登录
- 掌握SSH密钥的管理策略
- 了解SSH密钥的安全最佳实践
主要知识点
- SSH密钥认证基础
- SSH密钥对的生成
- 公钥的分发和配置
- SSH密钥的管理
- SSH配置文件的优化
- SSH密钥安全最佳实践
实用案例分析
案例1:生成SSH密钥对
场景描述:需要生成SSH密钥对,用于无密码登录远程服务器。
操作步骤:
生成RSA密钥对:
# 生成RSA密钥对,默认存储在~/.ssh/id_rsa ssh-keygen -t rsa -b 4096 # 按照提示输入密钥文件路径(默认即可) # 输入密码短语(可选,提高安全性) # 确认密码短语生成ED25519密钥对:
# 生成ED25519密钥对,安全性更高,密钥更小 ssh-keygen -t ed25519查看生成的密钥文件:
# 查看~/.ssh目录下的文件 ls -la ~/.ssh/ # 输出示例: # -rw------- 1 user user 1679 1月 1 00:00 id_rsa # 私钥 # -rw-r--r-- 1 user user 399 1月 1 00:00 id_rsa.pub # 公钥查看公钥内容:
# 查看RSA公钥内容 cat ~/.ssh/id_rsa.pub # 输出示例: # ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD... user@localhost
案例2:配置SSH公钥认证登录
场景描述:需要将本地生成的SSH公钥复制到远程服务器,实现无密码登录。
操作步骤:
使用ssh-copy-id复制公钥:
# 将公钥复制到远程服务器 ssh-copy-id user@remote-server # 输入远程服务器的密码手动复制公钥:
# 查看公钥内容并复制 cat ~/.ssh/id_rsa.pub # 登录远程服务器 ssh user@remote-server # 在远程服务器上创建~/.ssh目录(如果不存在) mkdir -p ~/.ssh chmod 700 ~/.ssh # 编辑authorized_keys文件,将复制的公钥粘贴进去 vim ~/.ssh/authorized_keys # 设置文件权限 chmod 600 ~/.ssh/authorized_keys # 退出远程服务器 exit测试无密码登录:
# 尝试登录远程服务器 ssh user@remote-server # 如果配置成功,应该不需要输入密码就能登录
案例3:SSH配置文件优化
场景描述:需要优化SSH客户端配置,提高连接速度和安全性。
操作步骤:
编辑SSH客户端配置文件:
# 编辑~/.ssh/config文件(如果不存在则创建) vim ~/.ssh/config添加配置内容:
# 服务器别名配置 Host server1 HostName 192.168.1.100 User user Port 22 IdentityFile ~/.ssh/id_rsa # 全局配置 Host * # 启用压缩 Compression yes # 减少连接超时时间 ConnectTimeout 10 # 启用TCP KeepAlive TCPKeepAlive yes # 减少KeepAlive间隔 ServerAliveInterval 30 # 禁用密码认证,只允许密钥认证 PasswordAuthentication no # 禁用X11转发 ForwardX11 no # 启用代理转发 ForwardAgent yes设置配置文件权限:
# 设置配置文件权限 chmod 600 ~/.ssh/config使用服务器别名登录:
# 使用别名登录服务器 ssh server1
案例4:SSH密钥管理和轮换
场景描述:需要管理多个SSH密钥,定期轮换密钥以提高安全性。
操作步骤:
生成多个SSH密钥对:
# 生成用于不同服务的密钥对 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "github" ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_server -C "server"使用特定密钥登录:
# 使用特定密钥登录服务器 ssh -i ~/.ssh/id_ed25519_server user@remote-server设置SSH代理:
# 启动SSH代理 eval "$(ssh-agent -s)" # 添加密钥到代理 ssh-add ~/.ssh/id_ed25519_github ssh-add ~/.ssh/id_ed25519_server # 查看代理中的密钥 ssh-add -l密钥轮换:
# 生成新密钥对 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new # 将新公钥复制到远程服务器 ssh-copy-id -i ~/.ssh/id_ed25519_new user@remote-server # 测试新密钥登录 ssh -i ~/.ssh/id_ed25519_new user@remote-server # 确认新密钥可用后,删除旧密钥 # 在远程服务器上编辑authorized_keys文件,删除旧公钥
案例5:SSH服务器安全配置
场景描述:需要配置SSH服务器,提高安全性。
操作步骤:
编辑SSH服务器配置文件:
# 编辑SSH服务器配置文件 sudo vim /etc/ssh/sshd_config修改配置内容:
# 禁用root登录 PermitRootLogin no # 禁用密码认证 PasswordAuthentication no # 禁用空密码 PermitEmptyPasswords no # 限制登录用户 AllowUsers user1 user2 # 更改默认端口 Port 2222 # 启用公钥认证 PubkeyAuthentication yes # 设置登录超时 LoginGraceTime 30 # 限制最大认证尝试次数 MaxAuthTries 3 # 禁用X11转发 X11Forwarding no # 禁用TCP端口转发 AllowTcpForwarding no重启SSH服务:
# 在Ubuntu/Debian上重启 sudo systemctl restart ssh # 在CentOS/RHEL上重启 sudo systemctl restart sshd测试SSH连接:
# 使用新端口连接 ssh -p 2222 user@remote-server
课后练习
练习1:SSH密钥对的生成和使用
- 生成不同类型的SSH密钥对(RSA、ED25519)
- 配置公钥认证登录
- 测试无密码登录
- 分析不同密钥类型的优缺点
练习2:SSH配置文件优化
- 创建SSH客户端配置文件
- 配置服务器别名
- 优化连接参数
- 测试配置效果
练习3:多密钥管理
- 生成多个SSH密钥对,用于不同场景
- 配置SSH代理管理多个密钥
- 使用不同密钥登录不同服务器
- 实现密钥的安全管理
练习4:SSH服务器安全加固
- 修改SSH服务器配置
- 禁用不安全的认证方式
- 限制登录用户和尝试次数
- 测试加固后的SSH服务
练习5:密钥轮换
- 生成新的SSH密钥对
- 将新公钥部署到所有服务器
- 测试新密钥的可用性
- 安全删除旧密钥
总结
本集详细介绍了SSH密钥管理的基本概念、操作方法和安全最佳实践,包括:
SSH密钥认证基础:SSH密钥认证使用非对称加密技术,通过公钥和私钥的配对实现安全认证。
密钥对生成:
- RSA:传统算法,应用广泛
- ED25519:现代算法,安全性更高,密钥更小
- 密钥长度:RSA建议4096位,ED25519固定长度
公钥分发:
- 使用ssh-copy-id工具自动复制
- 手动编辑authorized_keys文件
- 确保文件权限正确(~/.ssh目录700,authorized_keys文件600)
密钥管理:
- 使用SSH代理管理多个密钥
- 配置SSH客户端配置文件优化连接
- 定期轮换密钥提高安全性
安全最佳实践:
- 使用强密码短语保护私钥
- 禁用密码认证,只使用密钥认证
- 禁用root登录
- 更改默认SSH端口
- 限制登录用户和认证尝试次数
- 定期检查和更新SSH配置
SSH密钥管理是Linux系统管理中的重要技能,通过合理配置和管理SSH密钥,可以提高系统的安全性和管理效率。在实际应用中,应根据具体场景选择合适的密钥类型和管理策略,并严格遵守安全最佳实践。