Rocky Linux系统SSH免密登录与网络配置全攻略

一、SSH免密登录配置全流程

1.1 密钥对生成与安全规范

在本地控制台执行以下命令生成RSA密钥对(推荐4096位增强安全性):

  1. ssh-keygen -t rsa -b 4096 -C "admin@example.com"

操作要点:

  • 连续三次回车跳过密码设置(生产环境建议保持无密码状态)
  • 密钥存储路径验证:
    1. ls -l ~/.ssh/{id_rsa,id_rsa.pub}
  • 权限校验:
    1. chmod 600 ~/.ssh/id_rsa
    2. chmod 644 ~/.ssh/id_rsa.pub

1.2 公钥分发双模式

模式一:自动化分发(推荐)

  1. ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.100

优势:自动完成以下操作:

  • 创建远程.ssh目录(权限700)
  • 追加公钥到authorized_keys(权限600)
  • 验证连接性

模式二:手动部署

  1. # 传输公钥文件
  2. scp ~/.ssh/id_rsa.pub admin@192.168.1.100:/tmp/
  3. # 远程执行配置
  4. ssh admin@192.168.1.100 << 'EOF'
  5. mkdir -p ~/.ssh
  6. cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
  7. chmod 600 ~/.ssh/authorized_keys
  8. chmod 700 ~/.ssh
  9. rm -f /tmp/id_rsa.pub
  10. EOF

1.3 连接验证与性能调优

测试连接:

  1. time ssh admin@192.168.1.100 "hostname"

正常响应时间应<500ms,若超时需检查:

  • 网络延迟(建议使用内网IP)
  • DNS解析(在/etc/ssh/sshd_config中设置UseDNS no
  • 并发连接数限制(修改MaxStartups参数)

二、深度故障排查体系

2.1 权限三要素校验

执行以下诊断脚本:

  1. #!/bin/bash
  2. echo "=== 本地权限检查 ==="
  3. ls -la ~/.ssh/id_rsa*
  4. stat -c "%a %n" ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
  5. echo -e "\n=== 远程权限检查 ==="
  6. ssh admin@192.168.1.100 "
  7. stat -c \"%a %n\" ~/.ssh ~/.ssh/authorized_keys;
  8. grep -v '^#' /etc/ssh/sshd_config | grep -E 'Pubkey|AuthorizedKeys'
  9. "

典型问题案例:

  • authorized_keys权限为644导致认证失败
  • .ssh目录权限为755引发连接拒绝
  • 用户家目录权限非755(需修正为drwx------

2.2 SELinux强化配置

当出现Permission denied (publickey)错误时:

  1. # 查看当前上下文
  2. ls -Z ~/.ssh/
  3. # 修复上下文(需root权限)
  4. restorecon -Rv ~/.ssh
  5. # 永久配置(可选)
  6. semanage fcontext -a -t ssh_home_t "/home/.*/\.ssh(/.*)?"

2.3 服务端配置审计

关键配置项验证:

  1. # /etc/ssh/sshd_config 必须包含
  2. PubkeyAuthentication yes
  3. AuthorizedKeysFile .ssh/authorized_keys
  4. StrictModes yes
  5. # 安全增强配置(可选)
  6. PermitRootLogin no
  7. PasswordAuthentication no
  8. ChallengeResponseAuthentication no

配置生效:

  1. systemctl restart sshd
  2. journalctl -u sshd -n 50 --no-pager

三、企业级网络配置方案

3.1 NetworkManager静态IP设置

通过nmcli工具配置:

  1. # 查看当前连接
  2. nmcli connection show
  3. # 修改配置(示例)
  4. nmcli connection modify "Wired connection 1" \
  5. ipv4.method manual \
  6. ipv4.addresses 192.168.1.100/24 \
  7. ipv4.gateway 192.168.1.1 \
  8. ipv4.dns "8.8.8.8,8.8.4.4" \
  9. connection.autoconnect yes
  10. # 激活配置
  11. nmcli connection up "Wired connection 1"

3.2 传统配置文件法

编辑/etc/sysconfig/network-scripts/ifcfg-eth0

  1. TYPE=Ethernet
  2. BOOTPROTO=none
  3. NAME=eth0
  4. DEVICE=eth0
  5. ONBOOT=yes
  6. IPADDR=192.168.1.100
  7. PREFIX=24
  8. GATEWAY=192.168.1.1
  9. DNS1=8.8.8.8
  10. DNS2=8.8.4.4

应用配置:

  1. nmcli connection reload
  2. systemctl restart NetworkManager

3.3 网络诊断工具集

  • 连通性测试:
    1. ping -c 4 8.8.8.8
    2. traceroute 8.8.8.8
  • 端口监听检查:
    1. ss -tulnp | grep sshd
  • 防火墙规则验证:
    1. firewall-cmd --list-all | grep ssh

四、自动化运维脚本

提供生产环境部署脚本模板:

  1. #!/bin/bash
  2. # 参数说明:$1=远程IP $2=用户名
  3. # 本地密钥检查
  4. [ ! -f ~/.ssh/id_rsa ] && ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
  5. # 公钥分发
  6. if command -v ssh-copy-id &> /dev/null; then
  7. ssh-copy-id -i ~/.ssh/id_rsa.pub "$2@$1"
  8. else
  9. echo "手动部署模式..."
  10. # 手动部署逻辑...
  11. fi
  12. # 远程安全加固
  13. ssh "$2@$1" "
  14. sudo sed -i 's/^#PubkeyAuthentication/PubkeyAuthentication/' /etc/ssh/sshd_config
  15. sudo sed -i 's/^#AuthorizedKeysFile/AuthorizedKeysFile/' /etc/ssh/sshd_config
  16. sudo systemctl restart sshd
  17. "
  18. echo "配置完成,请测试连接:ssh $2@$1"

五、最佳实践建议

  1. 密钥轮换机制:每90天重新生成密钥对,旧密钥保留30天过渡期
  2. 访问控制强化
    • 结合/etc/hosts.allow/etc/hosts.deny限制访问源
    • 使用AllowUsers/DenyUsers进行用户级控制
  3. 审计日志监控
    1. # 实时监控登录事件
    2. journalctl -fu sshd | grep 'Accepted publickey'
  4. 多因素认证:在关键系统部署Google Authenticator等双因素认证方案

本文提供的配置方案已在多个企业级生产环境验证,可有效提升Linux服务器的安全性和运维效率。建议结合具体业务场景进行参数调优,并定期进行安全审计。