第147集:SSH 密钥管理

教学目标

  • 理解SSH密钥认证的基本原理
  • 掌握SSH密钥对的生成方法
  • 学会配置SSH密钥认证登录
  • 掌握SSH密钥的管理策略
  • 了解SSH密钥的安全最佳实践

主要知识点

  • SSH密钥认证基础
  • SSH密钥对的生成
  • 公钥的分发和配置
  • SSH密钥的管理
  • SSH配置文件的优化
  • SSH密钥安全最佳实践

实用案例分析

案例1:生成SSH密钥对

场景描述:需要生成SSH密钥对,用于无密码登录远程服务器。

操作步骤

  1. 生成RSA密钥对

    # 生成RSA密钥对,默认存储在~/.ssh/id_rsa
    ssh-keygen -t rsa -b 4096
    
    # 按照提示输入密钥文件路径(默认即可)
    # 输入密码短语(可选,提高安全性)
    # 确认密码短语
  2. 生成ED25519密钥对

    # 生成ED25519密钥对,安全性更高,密钥更小
    ssh-keygen -t ed25519
  3. 查看生成的密钥文件

    # 查看~/.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   # 公钥
  4. 查看公钥内容

    # 查看RSA公钥内容
    cat ~/.ssh/id_rsa.pub
    
    # 输出示例:
    # ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD... user@localhost

案例2:配置SSH公钥认证登录

场景描述:需要将本地生成的SSH公钥复制到远程服务器,实现无密码登录。

操作步骤

  1. 使用ssh-copy-id复制公钥

    # 将公钥复制到远程服务器
    ssh-copy-id user@remote-server
    
    # 输入远程服务器的密码
  2. 手动复制公钥

    # 查看公钥内容并复制
    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
  3. 测试无密码登录

    # 尝试登录远程服务器
    ssh user@remote-server
    
    # 如果配置成功,应该不需要输入密码就能登录

案例3:SSH配置文件优化

场景描述:需要优化SSH客户端配置,提高连接速度和安全性。

操作步骤

  1. 编辑SSH客户端配置文件

    # 编辑~/.ssh/config文件(如果不存在则创建)
    vim ~/.ssh/config
  2. 添加配置内容

    # 服务器别名配置
    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
  3. 设置配置文件权限

    # 设置配置文件权限
    chmod 600 ~/.ssh/config
  4. 使用服务器别名登录

    # 使用别名登录服务器
    ssh server1

案例4:SSH密钥管理和轮换

场景描述:需要管理多个SSH密钥,定期轮换密钥以提高安全性。

操作步骤

  1. 生成多个SSH密钥对

    # 生成用于不同服务的密钥对
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "github"
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_server -C "server"
  2. 使用特定密钥登录

    # 使用特定密钥登录服务器
    ssh -i ~/.ssh/id_ed25519_server user@remote-server
  3. 设置SSH代理

    # 启动SSH代理
    eval "$(ssh-agent -s)"
    
    # 添加密钥到代理
    ssh-add ~/.ssh/id_ed25519_github
    ssh-add ~/.ssh/id_ed25519_server
    
    # 查看代理中的密钥
    ssh-add -l
  4. 密钥轮换

    # 生成新密钥对
    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服务器,提高安全性。

操作步骤

  1. 编辑SSH服务器配置文件

    # 编辑SSH服务器配置文件
    sudo vim /etc/ssh/sshd_config
  2. 修改配置内容

    # 禁用root登录
    PermitRootLogin no
    
    # 禁用密码认证
    PasswordAuthentication no
    
    # 禁用空密码
    PermitEmptyPasswords no
    
    # 限制登录用户
    AllowUsers user1 user2
    
    # 更改默认端口
    Port 2222
    
    # 启用公钥认证
    PubkeyAuthentication yes
    
    # 设置登录超时
    LoginGraceTime 30
    
    # 限制最大认证尝试次数
    MaxAuthTries 3
    
    # 禁用X11转发
    X11Forwarding no
    
    # 禁用TCP端口转发
    AllowTcpForwarding no
  3. 重启SSH服务

    # 在Ubuntu/Debian上重启
    sudo systemctl restart ssh
    
    # 在CentOS/RHEL上重启
    sudo systemctl restart sshd
  4. 测试SSH连接

    # 使用新端口连接
    ssh -p 2222 user@remote-server

课后练习

  1. 练习1:SSH密钥对的生成和使用

    • 生成不同类型的SSH密钥对(RSA、ED25519)
    • 配置公钥认证登录
    • 测试无密码登录
    • 分析不同密钥类型的优缺点
  2. 练习2:SSH配置文件优化

    • 创建SSH客户端配置文件
    • 配置服务器别名
    • 优化连接参数
    • 测试配置效果
  3. 练习3:多密钥管理

    • 生成多个SSH密钥对,用于不同场景
    • 配置SSH代理管理多个密钥
    • 使用不同密钥登录不同服务器
    • 实现密钥的安全管理
  4. 练习4:SSH服务器安全加固

    • 修改SSH服务器配置
    • 禁用不安全的认证方式
    • 限制登录用户和尝试次数
    • 测试加固后的SSH服务
  5. 练习5:密钥轮换

    • 生成新的SSH密钥对
    • 将新公钥部署到所有服务器
    • 测试新密钥的可用性
    • 安全删除旧密钥

总结

本集详细介绍了SSH密钥管理的基本概念、操作方法和安全最佳实践,包括:

  1. SSH密钥认证基础:SSH密钥认证使用非对称加密技术,通过公钥和私钥的配对实现安全认证。

  2. 密钥对生成

    • RSA:传统算法,应用广泛
    • ED25519:现代算法,安全性更高,密钥更小
    • 密钥长度:RSA建议4096位,ED25519固定长度
  3. 公钥分发

    • 使用ssh-copy-id工具自动复制
    • 手动编辑authorized_keys文件
    • 确保文件权限正确(~/.ssh目录700,authorized_keys文件600)
  4. 密钥管理

    • 使用SSH代理管理多个密钥
    • 配置SSH客户端配置文件优化连接
    • 定期轮换密钥提高安全性
  5. 安全最佳实践

    • 使用强密码短语保护私钥
    • 禁用密码认证,只使用密钥认证
    • 禁用root登录
    • 更改默认SSH端口
    • 限制登录用户和认证尝试次数
    • 定期检查和更新SSH配置

SSH密钥管理是Linux系统管理中的重要技能,通过合理配置和管理SSH密钥,可以提高系统的安全性和管理效率。在实际应用中,应根据具体场景选择合适的密钥类型和管理策略,并严格遵守安全最佳实践。

« 上一篇 SSL/TLS 配置 下一篇 » GPG 加密工具