RockyLinux系统下SSH密钥登录的完整配置指南

一、SSH密钥认证技术原理

SSH密钥认证基于非对称加密体系,通过公私钥对实现身份验证。客户端保留私钥(需严格保密),服务端存储公钥(可公开)。当客户端发起连接时,服务端通过挑战-响应机制验证客户端是否持有对应私钥,整个过程无需传输密码,有效防范暴力破解与中间人攻击。

相比传统密码认证,密钥认证具有三大优势:

  1. 安全性提升:ED25519算法提供128位安全强度,远超常规密码复杂度要求
  2. 自动化管理:支持脚本批量操作,适合集群服务器管理场景
  3. 审计便利性:所有登录行为可通过密钥ID追溯具体用户

二、密钥生成与配置准备

2.1 密钥对生成

推荐使用ED25519算法生成密钥对,该算法在安全性和性能间取得最佳平衡:

  1. ssh-keygen -t ed25519 -C "admin@example.com"

执行后系统会提示:

  1. 密钥存储路径(默认~/.ssh/id_ed25519
  2. 可选设置访问密码(Passphrase)
  3. 确认密钥生成

建议为不同用途创建独立密钥对(如生产环境/测试环境),通过-f参数指定自定义路径:

  1. ssh-keygen -t ed25519 -f ~/.ssh/prod_id_ed25519 -C "prod-access"

2.2 服务端环境检查

确保服务端满足以下条件:

  1. 已安装OpenSSH服务(默认安装)
  2. SSH服务运行状态正常:
    1. systemctl status sshd
  3. 检查.ssh目录权限:
    1. ls -ld ~/.ssh # 应显示700权限
    2. ls -l ~/.ssh/ # authorized_keys应显示600权限

三、公钥分发方法详解

3.1 自动分发工具(推荐)

当系统已安装ssh-copy-id工具时,执行:

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

该命令会自动完成:

  1. 创建.ssh目录(如果不存在)
  2. 设置正确目录权限
  3. 将公钥追加到authorized_keys文件

3.2 手动分发流程

在无自动化工具时,按以下步骤操作:

  1. 显示公钥内容:
    1. cat ~/.ssh/id_ed25519.pub
  2. 通过安全渠道(如加密邮件/控制台)传输公钥文本
  3. 服务端执行:
    1. mkdir -p ~/.ssh
    2. chmod 700 ~/.ssh
    3. echo "公钥内容" >> ~/.ssh/authorized_keys
    4. chmod 600 ~/.ssh/authorized_keys

3.3 批量分发实践

对于大规模服务器集群,建议使用Ansible等配置管理工具:

  1. - name: Distribute SSH public key
  2. authorized_key:
  3. user: root
  4. key: "{{ lookup('file', '/home/user/.ssh/id_ed25519.pub') }}"
  5. state: present
  6. manage_dir: yes

四、客户端连接配置

4.1 基础连接命令

使用指定密钥连接服务器:

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

建议在~/.ssh/config中配置连接别名:

  1. Host prod-server
  2. HostName 192.168.5.100
  3. User root
  4. IdentityFile ~/.ssh/id_ed25519
  5. IdentitiesOnly yes

配置后可直接使用:

  1. ssh prod-server

4.2 多密钥管理策略

当拥有多个密钥时,可通过以下方式指定使用:

  1. 连接时通过-i参数指定
  2. config文件中设置IdentitiesOnly参数
  3. 使用ssh-agent管理密钥:
    1. eval "$(ssh-agent)"
    2. ssh-add ~/.ssh/id_ed25519

五、安全加固最佳实践

5.1 服务端安全配置

编辑/etc/ssh/sshd_config文件:

  1. # 禁用密码认证
  2. PasswordAuthentication no
  3. # 禁用root直接登录
  4. PermitRootLogin no
  5. # 限制认证方法
  6. AuthenticationMethods publickey
  7. # 限制用户登录
  8. AllowUsers admin1 admin2

修改后重启服务:

  1. systemctl restart sshd

5.2 密钥轮换机制

建议每6-12个月更换密钥对,轮换流程:

  1. 生成新密钥对
  2. 更新所有服务端的authorized_keys
  3. 测试新密钥连接
  4. 备份旧私钥后删除

5.3 审计与监控

  1. 启用SSH日志记录:
    1. LogLevel VERBOSE
  2. 使用日志分析工具监控异常登录
  3. 设置告警规则检测多次失败尝试

六、故障排查指南

6.1 常见问题处理

错误现象 可能原因 解决方案
Permission denied (publickey) 权限设置错误 检查.ssh目录权限
Too many authentication failures 密钥尝试过多 使用-i指定密钥或配置IdentitiesOnly
Connection refused 服务未运行 检查sshd服务状态
Agent admitted failure to sign ssh-agent问题 重新添加密钥或重启agent

6.2 调试技巧

  1. 启用详细日志:
    1. ssh -vvv root@192.168.5.100
  2. 检查服务端日志:
    1. journalctl -u sshd --no-pager -n 50
  3. 验证密钥格式:
    1. ssh-keygen -l -f ~/.ssh/id_ed25519.pub

通过以上系统化的配置流程,运维人员可在RockyLinux环境中建立安全的SSH密钥认证体系。该方案不仅适用于单机环境,通过配置管理工具可轻松扩展至千台级服务器集群,为云原生环境下的自动化运维奠定坚实基础。建议结合定期安全审计与密钥轮换策略,构建持续优化的安全运维体系。