一、sshd_config配置文件基础解析
1. 文件路径与权限要求
sshd_config默认位于/etc/ssh/目录,文件宿主为root,权限建议设置为644(即-rw-r--r--)。若权限配置不当(如权限开放至777),可能导致密钥泄露或未授权修改,引发安全风险。
2. 配置语法规则
- 键值对格式:参数名与值通过空格分隔,例如
Port 2222。 - 注释规则:以
#开头的行为注释,默认配置中多数参数被注释,需取消注释并修改生效。 - 优先级机制:若通过
Include /etc/ssh/sshd_config.d/*.conf引入子配置文件,其参数优先级高于主配置文件,重复参数以最后定义为准。
3. 核心配置参数详解
(1)监听与连接控制
- Port:默认监听22端口,生产环境建议修改为10000-65535之间的非知名端口(如
Port 2222),规避端口扫描攻击。 - ListenAddress:指定监听IP地址,例如
ListenAddress 192.168.1.100可限制仅通过内网IP访问。 - MaxStartups:控制未认证连接的最大并发数,默认值10,防止暴力破解时资源耗尽。
(2)认证与访问控制
- PermitRootLogin:禁止root直接登录(
PermitRootLogin no),强制使用普通用户+sudo提权,降低高危操作风险。 - PasswordAuthentication:禁用密码认证(
PasswordAuthentication no),仅允许密钥登录,杜绝弱密码泄露风险。 - AllowUsers/DenyUsers:白名单机制,例如
AllowUsers ops admin仅允许指定用户登录。 - AuthorizedKeysFile:指定公钥存储路径,默认
.ssh/authorized_keys,需确保文件权限为600。
(3)安全加固参数
- LoginGraceTime:认证超时时间,默认120秒,建议缩短至60秒(
LoginGraceTime 60),减少暴力破解窗口期。 - ClientAliveInterval:心跳检测间隔,例如
ClientAliveInterval 300每5分钟发送存活包,自动断开闲置连接。 - UseDNS:禁用DNS反向解析(
UseDNS no),加速登录响应并避免DNS欺骗攻击。
二、天翼云服务器实践案例
场景:某企业使用天翼云弹性云主机部署Web服务,需通过SSH进行运维管理,要求满足以下安全需求:
- 修改SSH默认端口为2222;
- 禁止root直接登录;
- 仅允许运维组(ssh-users)成员登录;
- 启用密钥认证并禁用密码登录。
操作步骤
1. 修改sshd_config配置文件
bash
# 备份原配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup_$(date +%Y%m%d)
# 编辑配置文件
sudo vi /etc/ssh/sshd_config
修改以下关键参数:
ini
Port 2222 # 修改监听端口
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 禁用密码认证
PubkeyAuthentication yes # 启用密钥认证
AllowGroups ssh-users # 仅允许ssh-users组登录
ClientAliveInterval 300 # 心跳检测间隔5分钟
UseDNS no # 禁用DNS解析
2. 创建运维组并添加用户
bash
sudo groupadd ssh-users # 创建组
sudo usermod -aG ssh-users ops # 将用户ops加入组
3. 生成密钥对并配置公钥
在客户端生成密钥对(若未生成):
bash
ssh-keygen -t ed25519 -C "ops@example.com"
将公钥上传至服务器:
bash
# 创建.ssh目录并设置权限
ssh ops@服务器IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
# 追加公钥至authorized_keys
cat ~/.ssh/id_ed25519.pub | ssh ops@服务器IP "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
4. 开放防火墙与SELinux规则
bash
# 开放2222端口(CentOS 7+)
sudo firewall-cmd --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
# 若启用SELinux,需添加端口规则
sudo semanage port -a -t ssh_port_t -p tcp 2222
5. 重启SSH服务并验证
bash
sudo systemctl restart sshd
sudo systemctl status sshd # 检查服务状态
测试新端口登录:
bash
ssh -p 2222 ops@服务器IP
三、常见问题与排查
1. 修改配置后无法连接
- 原因:语法错误或端口未开放。
- 解决:
- 使用
sudo sshd -t测试配置语法; - 检查防火墙规则(
firewall-cmd --list-ports)与SELinux设置。
- 使用
2. 密钥登录失败
- 原因:公钥权限或路径错误。
- 解决:
- 确保
authorized_keys权限为600; - 验证公钥内容是否正确追加至文件。
- 确保
四、总结
通过合理配置sshd_config,可显著提升天翼云服务器的SSH安全性。本文通过修改端口、禁用root登录、启用密钥认证等实践,构建了多层次防护体系。实际运维中,建议结合日志分析(/var/log/secure)与自动化工具(如Ansible)实现批量管理,进一步降低人为配置风险。