加固 SSH 服务器
通过编辑 sshd_config 锁定 SSH 服务器:禁用 root 和密码登录、修改高风险默认设置、限制用户,并应用分层保护,确保只有受信任的客户端能够连接。
加固 SSH 服务器 是 CoddyKit 上的免费 Linux Server Deployment & SSH Mastery 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Server Deployment & SSH Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。
为什么要强化 SSH
暴露在互联网上的 SSH 服务器一直是自动化攻击的目标。默认设置会留下几处开放入口,供机器人不断探测。
强化意味着收紧服务器端配置,即使攻击者找到您的服务器,也无法通过暴力破解进入。
sshd_config 文件
服务器端 SSH 行为由 /etc/ssh/sshd_config 控制。这与您之前配置的客户端配置文件(~/.ssh/config)不同。
请始终以 root 身份编辑该文件,并在修改前保留备份。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config禁用 root 登录
root 账户是攻击者首先尝试的目标。禁用直接 root 登录会迫使攻击者还要猜出一个有效的用户名。
将 PermitRootLogin 设置为 no。管理员应以普通用户身份登录,然后使用 sudo。
PermitRootLogin no禁用密码身份验证
基于密钥的身份验证正常工作后,请完全关闭密码登录。这样可以彻底抵御暴力破解攻击 — 因为根本没有密码可供猜测。
警告:应用此设置前,请确认使用密钥登录正常,否则您可能会把自己锁在系统之外。
PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes限制允许登录的用户
您可以使用 AllowUsers 或 AllowGroups,明确列出允许使用 SSH 的账户。未列出的任何人即使拥有有效密钥也会被拒绝。
这是多用户服务器上一种强大而简单的控制措施。
AllowUsers deploy admin
# or by group:
AllowGroups sshusers更改默认端口(可选)
将 SSH 从端口 22 移走并不会增加真正的安全性,但会大幅减少自动扫描程序在日志中产生的噪声。
请选择一个非标准端口,并记得在防火墙中开放该端口,同时告知您的客户端。
Port 2222限制登录尝试和会话
以下几个指令可以缩短攻击者可利用的时间窗口:
MaxAuthTries— 断开连接前允许的失败尝试次数LoginGraceTime— 允许完成身份验证的秒数MaxSessions— 每个连接允许的并发会话数
MaxAuthTries 3
LoginGraceTime 30
MaxSessions 2安全地应用更改
编辑完成后,重启服务前请使用 sshd -t 验证语法 — 一个拼写错误就可能导致服务无法启动,并把您锁在系统之外。
然后重新加载服务。请保持当前会话处于打开状态,并在关闭它之前测试一个新连接。
sudo sshd -t
sudo systemctl restart ssh使用 Fail2ban 防御暴力破解
Fail2ban 会监视您的身份验证日志,并暂时封禁失败次数过多的 IP。它会在 sshd 设置之上增加一层动态防火墙保护。
请安装它并启用 SSH 监狱;对于大多数服务器,默认设置已经合理。
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd验证您的加固配置
确认服务器现在会拒绝您禁用的功能。尝试使用详细输出进行连接,以查看服务器提供哪些身份验证方法。
经过加固的服务器应该只公布 publickey,并拒绝密码登录和 root 登录。
ssh -v deploy@server
# Look for: 'Authentications that can continue: publickey'最佳实践
请持续保护您的 SSH 服务器:
- 在测试密钥登录之前,绝不要应用
PasswordAuthentication no - 修改配置时,保持至少一个会话处于打开状态
- 每次编辑后都使用
sshd -t - 将 sshd 加固与防火墙和 Fail2ban 结合使用
快速检查
测试您对 SSH 加固的掌握情况。
回顾
您已通过 /etc/ssh/sshd_config 加固 SSH 服务器:
- 禁用了 root 登录和密码登录
- 使用
AllowUsers将用户列入允许名单 - 调整了
MaxAuthTries和LoginGraceTime - 添加 Fail2ban 以提供动态暴力破解防护
请使用 sshd -t 验证,并始终在关闭会话前进行测试。
常见问题解答
「加固 SSH 服务器」课时是免费的吗?
是的 — 「加固 SSH 服务器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Linux Server Deployment & SSH Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。
「加固 SSH 服务器」这节课中我会学到什么?
通过编辑 sshd_config 锁定 SSH 服务器:禁用 root 和密码登录、修改高风险默认设置、限制用户,并应用分层保护,确保只有受信任的客户端能够连接。 你通过在浏览器中直接运行的动手代码来练习 Linux Server Deployment & SSH Mastery,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Linux Server Deployment & SSH Mastery 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Linux Server Deployment & SSH Mastery 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「加固 SSH 服务器」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Linux Server Deployment & SSH Mastery 课中编写并运行代码吗?
能。每节 Linux Server Deployment & SSH Mastery 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 了解 SSH 协议
- 配置 SSH 客户端
- 基于 SSH 密钥的身份验证
- 加固 SSH 服务器