RockyLinux系统SSH密钥认证配置全指南

一、SSH密钥认证技术原理

SSH密钥认证基于非对称加密技术,通过生成公私钥对实现身份验证。相较于传统密码认证,密钥认证具有以下优势:

  1. 安全性提升:私钥仅保存在客户端,服务端仅存储公钥,有效防止暴力破解
  2. 自动化运维:支持脚本批量操作,无需人工输入密码
  3. 审计合规:符合金融、政务等行业的安全认证规范
  4. 性能优化:密钥交换过程比密码认证更高效

密钥认证流程包含三个核心步骤:

  1. 客户端生成密钥对(公钥+私钥)
  2. 公钥上传至服务端授权文件
  3. 客户端通过私钥证明身份完成认证

二、密钥生成与配置准备

2.1 密钥类型选择

推荐使用Ed25519算法生成密钥,其优势包括:

  • 更短的密钥长度(256位)提供同等安全性
  • 抗侧信道攻击能力更强
  • 签名验证速度比RSA快3-5倍

生成命令示例:

  1. ssh-keygen -t ed25519 -C "admin@example.com" -f ~/.ssh/id_ed25519

参数说明:

  • -t:指定算法类型
  • -C:添加注释信息
  • -f:指定密钥存储路径

2.2 密钥文件结构

生成的密钥文件包含:

  • id_ed25519:私钥文件(需严格保密)
  • id_ed25519.pub:公钥文件(需分发到服务端)

建议设置600权限保护私钥:

  1. chmod 600 ~/.ssh/id_ed25519

三、公钥分发方案

3.1 自动分发工具(推荐)

使用ssh-copy-id工具自动完成分发:

  1. ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.168.5.100

执行过程包含:

  1. 建立SSH连接
  2. 创建~/.ssh目录(如果不存在)
  3. 将公钥追加到authorized_keys文件
  4. 设置正确的文件权限

3.2 手动分发流程

当自动工具不可用时,可执行以下步骤:

  1. 通过SCP传输公钥文件:

    1. scp ~/.ssh/id_ed25519.pub root@192.168.5.100:/tmp/
  2. 登录服务器执行:

    1. mkdir -p ~/.ssh
    2. chmod 700 ~/.ssh
    3. cat /tmp/id_ed25519.pub >> ~/.ssh/authorized_keys
    4. chmod 600 ~/.ssh/authorized_keys
    5. restorecon -Rv ~/.ssh # 针对SELinux系统

四、服务端安全配置

4.1 SSH服务优化

编辑/etc/ssh/sshd_config文件,建议修改以下参数:

  1. PubkeyAuthentication yes
  2. PasswordAuthentication no # 禁用密码认证
  3. ChallengeResponseAuthentication no
  4. AuthorizedKeysFile .ssh/authorized_keys
  5. UsePAM no

修改后重启服务:

  1. systemctl restart sshd

4.2 防火墙配置

确保SSH端口(默认22)开放:

  1. firewall-cmd --permanent --add-service=ssh
  2. firewall-cmd --reload

4.3 权限加固

执行以下命令确保目录权限正确:

  1. chown -R root:root ~/.ssh
  2. find ~/.ssh -type f -exec chmod 600 {} \;
  3. find ~/.ssh -type d -exec chmod 700 {} \;

五、客户端连接测试

5.1 标准连接方式

  1. ssh -i ~/.ssh/id_ed25519 root@192.168.5.100

5.2 配置SSH客户端

编辑~/.ssh/config实现免参数连接:

  1. Host myserver
  2. HostName 192.168.5.100
  3. User root
  4. IdentityFile ~/.ssh/id_ed25519

配置后可直接使用:

  1. ssh myserver

六、故障排查指南

6.1 常见错误场景

  1. Permission denied (publickey)

    • 检查私钥权限是否为600
    • 确认公钥已正确添加到服务端
    • 验证服务端SSH配置是否允许公钥认证
  2. Connection refused

    • 检查服务端SSH服务是否运行
    • 确认防火墙规则是否放行
    • 验证IP地址和端口是否正确
  3. Bad permissions on ~/.ssh/config

    • 确保客户端config文件权限为600

6.2 日志分析

服务端日志位置:

  1. journalctl -u sshd --no-pager -n 50

或查看系统日志:

  1. tail -n 50 /var/log/secure

七、进阶安全实践

7.1 双因素认证

结合Google Authenticator实现:

  1. 安装必要组件:

    1. yum install google-authenticator pam-devel
  2. 修改PAM配置:

    1. auth required pam_google_authenticator.so
  3. 用户执行:

    1. google-authenticator

7.2 密钥轮换策略

建议每90天更换密钥对,执行:

  1. # 生成新密钥
  2. ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new
  3. # 更新服务端
  4. ssh-copy-id -i ~/.ssh/id_ed25519_new.pub root@server
  5. # 测试新密钥
  6. ssh -i ~/.ssh/id_ed25519_new root@server
  7. # 删除旧密钥(确认无误后)
  8. rm ~/.ssh/id_ed25519*

7.3 审计与监控

  1. 配置日志轮转:

    1. # /etc/logrotate.d/sshd
    2. /var/log/secure {
    3. weekly
    4. missingok
    5. rotate 4
    6. compress
    7. delaycompress
    8. notifempty
    9. create 0600 root utmp
    10. }
  2. 设置告警规则:

    1. # 监控异常登录
    2. grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | head -5

通过完整的密钥认证体系构建,系统管理员可显著提升服务器安全等级,同时实现运维自动化。建议定期审查SSH配置,结合安全组策略和入侵检测系统构建多层次防护体系。对于大规模服务器集群,可考虑使用配置管理工具(如Ansible)批量部署密钥认证方案。