sshd配置实战:从基础安全到高级调优

发布时间:2026/10/31 7:24:41
sshd配置实战:从基础安全到高级调优 1. SSH服务基础认知与安全风险每次用密码登录服务器时那个熟悉的22端口背后其实藏着不少安全隐患。去年我们公司某台测试服务器就因使用默认配置被自动化脚本扫到弱密码差点成了矿机。SSH作为Linux系统的门户其安全性直接关系到整个服务器的生死存亡。OpenSSH服务由客户端(ssh)和服务端(sshd)组成配置文件分别位于/etc/ssh/ssh_config和/etc/ssh/sshd_config。服务端配置文件中的每个参数都像是一道安全阀门比如默认的Port 22就像把钥匙挂在门把手上而PermitRootLogin yes则相当于给黑客发了VIP通行证。我曾见过有运维在云服务器上同时开启密码认证和root登录结果不到24小时就被暴力破解成功。最危险的几个默认配置包括使用国际通用的22端口允许root用户直接登录开启密码认证方式不限制登录尝试次数使用弱加密算法部分老系统仍支持SSH1# 查看当前SSH连接状态的实用命令 netstat -tulnp | grep sshd ss -ltnp | grep sshd2. 基础安全加固五步法2.1 修改默认端口把22端口改成非标准端口能挡住99%的自动化扫描。上周我给客户服务器改成58222端口后日志里的非法尝试立即归零。但要注意别用已被占用的端口如80、443建议在1024-65535间选# 先测试新端口是否可用 sudo semanage port -a -t ssh_port_t -p tcp 58222 sudo firewall-cmd --add-port58222/tcp --permanent sudo firewall-cmd --reload # 修改配置文件 sudo sed -i s/#Port 22/Port 58222/ /etc/ssh/sshd_config2.2 禁用root直接登录Ubuntu系默认已禁用但CentOS等需要手动关闭。建议创建普通用户再sudo提权# 创建运维专用账户 sudo useradd -m -s /bin/bash opsadmin sudo passwd opsadmin sudo usermod -aG wheel opsadmin # CentOS sudo usermod -aG sudo opsadmin # Ubuntu # 禁用root登录 sudo sed -i s/PermitRootLogin yes/PermitRootLogin no/ /etc/ssh/sshd_config2.3 强制密钥认证密钥认证比密码安全几个数量级。生成密钥时建议用ed25519算法比RSA更安全高效# 本地生成密钥对 ssh-keygen -t ed25519 -C your_emailexample.com -f ~/.ssh/server_access # 将公钥上传到服务器 ssh-copy-id -i ~/.ssh/server_access.pub -p 58222 opsadminserver_ip # 关闭密码认证 sudo sed -i s/PasswordAuthentication yes/PasswordAuthentication no/ /etc/ssh/sshd_config2.4 登录超时与尝试限制这些参数能有效防止暴力破解LoginGraceTime 1m # 登录超时从2分钟改为1分钟 MaxAuthTries 3 # 最大认证尝试次数 ClientAliveInterval 300 # 无操作300秒后断开连接 ClientAliveCountMax 2 # 保持活跃检测次数2.5 防火墙白名单控制只允许可信IP连接SSH是最佳实践。用firewalld或iptables都行# firewalld方案 sudo firewall-cmd --permanent --add-rich-rulerule familyipv4 source address123.123.123.123 service namessh accept sudo firewall-cmd --reload # iptables方案 sudo iptables -A INPUT -p tcp --dport 58222 -s 123.123.123.123 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 58222 -j DROP3. 高级调优技巧3.1 日志深度监控SSH日志默认在/var/log/secure(RHEL)或/var/log/auth.log(Debian)。建议开启详细日志# 修改日志级别为VERBOSE sudo sed -i s/#LogLevel INFO/LogLevel VERBOSE/ /etc/ssh/sshd_config # 实时监控登录尝试 sudo tail -f /var/log/secure | grep sshd3.2 连接数限制防止单个IP耗尽连接资源MaxStartups 10:30:60 # 前10个立即接受11-30个随机拒绝超过60个全拒 MaxSessions 5 # 每个IP最多5个会话3.3 Match条件块对不同用户/IP应用不同策略。比如允许内网IP用密码登录外网必须用密钥Match Address 192.168.1.0/24 PasswordAuthentication yes Match all PasswordAuthentication no3.4 加密算法强化禁用不安全的旧算法# 在/etc/ssh/sshd_config末尾添加 KexAlgorithms curve25519-sha256libssh.org Ciphers chacha20-poly1305openssh.com,aes256-gcmopenssh.com MACs hmac-sha2-512-etmopenssh.com4. 故障排查与维护4.1 配置语法检查每次修改后务必测试# 检查配置语法 sudo sshd -t # 重载服务不断开现有连接 sudo systemctl reload sshd # 查看生效配置 sudo sshd -T | grep -E port|password|permitroot4.2 连接问题诊断当连接失败时用-vvv参数查看详细过程ssh -vvv -p 58222 opsadminserver_ip常见错误解决方案连接超时检查防火墙/安全组规则权限拒绝确认~/.ssh权限为700authorized_keys为600协议不匹配客户端和服务端算法要兼容4.3 自动化安全巡检用脚本定期检查SSH配置#!/bin/bash check_ssh_security() { echo 当前SSH端口$(sshd -T | grep port | awk {print $2}) echo Root登录状态$(sshd -T | grep permitrootlogin | awk {print $2}) echo 密码认证状态$(sshd -T | grep passwordauthentication | awk {print $2}) echo 活跃连接数$(netstat -tn | grep :58222 | wc -l) }最后提醒任何修改前先备份原配置sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak改错参数可能导致锁死在服务器外。建议在本地虚拟机先测试再用Ansible等工具批量部署。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询