news 2026/7/16 9:33:53

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 sshd

2. 基础安全加固五步法

2.1 修改默认端口

把22端口改成非标准端口能挡住99%的自动化扫描。上周我给客户服务器改成58222端口后,日志里的非法尝试立即归零。但要注意别用已被占用的端口(如80、443),建议在1024-65535间选:

# 先测试新端口是否可用 sudo semanage port -a -t ssh_port_t -p tcp 58222 sudo firewall-cmd --add-port=58222/tcp --permanent sudo firewall-cmd --reload # 修改配置文件 sudo sed -i 's/#Port 22/Port 58222/' /etc/ssh/sshd_config

2.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_config

2.3 强制密钥认证

密钥认证比密码安全几个数量级。生成密钥时建议用ed25519算法(比RSA更安全高效):

# 本地生成密钥对 ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/server_access # 将公钥上传到服务器 ssh-copy-id -i ~/.ssh/server_access.pub -p 58222 opsadmin@server_ip # 关闭密码认证 sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

2.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-rule='rule family="ipv4" source address="123.123.123.123" service name="ssh" 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 DROP

3. 高级调优技巧

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 sshd

3.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 no

3.4 加密算法强化

禁用不安全的旧算法:

# 在/etc/ssh/sshd_config末尾添加 KexAlgorithms curve25519-sha256@libssh.org Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com

4. 故障排查与维护

4.1 配置语法检查

每次修改后务必测试:

# 检查配置语法 sudo sshd -t # 重载服务(不断开现有连接) sudo systemctl reload sshd # 查看生效配置 sudo sshd -T | grep -E "port|password|permitroot"

4.2 连接问题诊断

当连接失败时,用-vvv参数查看详细过程:

ssh -vvv -p 58222 opsadmin@server_ip

常见错误解决方案:

  • 连接超时:检查防火墙/安全组规则
  • 权限拒绝:确认~/.ssh权限为700,authorized_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等工具批量部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 9:32:12

DeepSeek最强提示词:只要一句话,AI自动替你多想五步

现在几乎所有人都在用DeepSeek处理工作、学习、生活各类问题,但绝大多数人只会简单抛一句问题,得到的答案浅、片面、漏洞多,经常出现逻辑断层、脱离现实、凭空编造信息的情况。很多人误以为是模型能力不足,实际核心问题出在提示词…

作者头像 李华
网站建设 2026/7/16 9:30:33

Python数据分析实战:Numpy、Pandas、Matplotlib完整工作流指南

还记得第一次面对一堆销售数据、用户行为日志或业务报表时,那种无从下手的感觉吗?你可能听说过 Python 数据分析很强大,也知道 Numpy、Pandas、Matplotlib 这些名字,但真正要自己动手时,却发现光是安装环境、理解各种函…

作者头像 李华
网站建设 2026/7/16 9:28:42

Witty-Insight未来展望:路线图规划与社区贡献指南

Witty-Insight未来展望:路线图规划与社区贡献指南 【免费下载链接】witty-insight The witty-insight is an eBPF-based observability framework for tracing agent execution pipelines. 项目地址: https://gitcode.com/openeuler/witty-insight 前往项目官…

作者头像 李华
网站建设 2026/7/16 9:27:46

HarmonyOS7 金额前后缀输入框:用 caretColor 把金额输入做得更顺手

文章目录前言使用场景先讲清楚代码阅读顺序重点实现细节完整代码容易踩坑的地方收个尾前言 这篇继续聊 HarmonyOS7 里的 输入框前后缀与光标。如果你刚开始学 ArkUI,不建议一上来就背属性名,那样很容易看完就忘。更好的方式是先搞清楚:这个页…

作者头像 李华
网站建设 2026/7/16 9:27:39

HarmonyOs应用《重要日》开发第2篇 - 开发环境搭建与项目创建

本篇将手把手教你如何搭建 HarmonyOS 开发环境,创建 ImportantDays 项目工程,并完成基础配置。一、开发工具准备 1.1 DevEco Studio HarmonyOS 应用开发使用华为官方 IDE DevEco Studio,它是基于 IntelliJ IDEA 社区版定制的集成开发环境。 下…

作者头像 李华
网站建设 2026/7/16 9:27:12

宋恭帝赵㬎:身不由己的南宋亡国幼帝

一、人物介绍赵㬎(1271年-1323年),南宋第七位皇帝,宋度宗嫡子,史称宋恭帝。他即位时年仅四岁,是典型的幼主临朝,一生从未真正掌控皇权。身处南宋彻底覆灭的乱世,他懵懂登…

作者头像 李华