一、SSH免密登录配置指南
1.1 密钥对生成与安全存储
在Linux系统中使用RSA算法生成4096位密钥对是当前最安全的认证方式之一。执行以下命令创建密钥:
ssh-keygen -t rsa -b 4096 -C "admin@example.com"
系统会提示输入保存路径和密码短语,建议:
- 保持默认路径
~/.ssh/ - 密码短语留空(直接回车)
- 生成后检查文件权限:
ls -l ~/.ssh/id_rsa*-rw------- 1 root root 3243 May 15 10:30 id_rsa-rw-r--r-- 1 root root 742 May 15 10:30 id_rsa.pub
1.2 推荐配置方法:ssh-copy-id工具
该工具能自动完成以下关键操作:
- 将公钥追加到远程
authorized_keys文件 - 创建必要的
.ssh目录结构 - 设置正确的文件权限
完整操作流程:
# 本地执行(需先建立基础SSH连接)ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host# 验证配置ssh user@remote_host# 应直接进入shell而无密码提示
1.3 手动配置方案(适用于特殊环境)
当自动工具不可用时,需手动完成:
- 创建目录结构:
mkdir -p ~/.sshchmod 700 ~/.ssh
- 追加公钥内容:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
- SELinux上下文修复(Rocky Linux默认启用):
restorecon -R -v ~/.ssh
1.4 服务端配置检查
修改/etc/ssh/sshd_config关键参数:
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keysChallengeResponseAuthentication noPasswordAuthentication no
应用配置变更:
sudo systemctl restart sshdsudo systemctl status sshd # 验证服务状态
二、网络配置管理方案
2.1 NetworkManager基础配置
作为RHEL系标准网络管理工具,提供两种配置方式:
命令行配置(nmcli)
# 查看当前连接nmcli connection show# 修改静态IP配置nmcli connection modify eth0 \ipv4.addresses 192.168.1.100/24 \ipv4.gateway 192.168.1.1 \ipv4.dns "8.8.8.8,8.8.4.4" \ipv4.method manual# 应用配置nmcli connection up eth0
配置文件方式
编辑/etc/sysconfig/network-scripts/ifcfg-eth0:
BOOTPROTO=noneONBOOT=yesIPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=8.8.8.8DNS2=8.8.4.4
2.2 网络故障排查流程
- 基础连通性测试:
ping 8.8.8.8traceroute 8.8.8.8
- 服务状态检查:
systemctl status NetworkManagerjournalctl -u NetworkManager --no-pager -n 50
- 接口信息验证:
ip addr show eth0nmcli device show eth0
三、安全加固最佳实践
3.1 SSH服务强化
- 修改默认端口(建议2222以上)
- 限制登录用户组:
AllowGroups sshusers
- 启用登录失败限制:
MaxAuthTries 3LoginGraceTime 30s
3.2 防火墙配置
# 允许新SSH端口sudo firewall-cmd --permanent --add-port=2222/tcpsudo firewall-cmd --reload# 验证规则sudo firewall-cmd --list-ports
3.3 定期审计方案
- 密钥轮换策略:
# 每季度生成新密钥find ~/.ssh -name "id_rsa*" -mtime +90 -exec rm {} \;
- 登录日志监控:
journalctl -u sshd --since "1 hour ago" | grep "Accepted"
四、自动化部署脚本
以下脚本实现一键配置(需root权限):
#!/bin/bash# 变量定义SSH_PORT=2222USER="admin"REMOTE_HOST="192.168.1.200"# 生成密钥对echo "生成SSH密钥对..."ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N ""# 配置本地SSHecho "配置本地SSH客户端..."cat >> /etc/ssh/ssh_config <<EOFHost *ServerAliveInterval 60ConnectTimeout 10EOF# 远程配置(需提前建立基础连接)echo "配置远程服务器..."ssh -p $SSH_PORT $USER@$REMOTE_HOST " \mkdir -p ~/.ssh && \chmod 700 ~/.ssh && \echo '$(cat /root/.ssh/id_rsa.pub)' >> ~/.ssh/authorized_keys && \chmod 600 ~/.ssh/authorized_keys && \sed -i 's/^#PubkeyAuthentication/PubkeyAuthentication/' /etc/ssh/sshd_config && \sed -i 's/^#AuthorizedKeysFile/AuthorizedKeysFile/' /etc/ssh/sshd_config && \systemctl restart sshd"echo "配置完成!请测试免密登录:"ssh -p $SSH_PORT $USER@$REMOTE_HOST "hostname"
本方案通过标准化流程和自动化工具,有效解决了企业环境中SSH安全配置的复杂性问题。实际部署时建议:
- 先在测试环境验证
- 制定完整的回滚方案
- 记录所有配置变更
- 建立配置管理数据库(CMDB)
对于大规模部署场景,可考虑集成到Ansible等配置管理工具中,实现更高效的批量管理。