08 - SSH 服务配置与安全优化 🔐
前提条件 ✅
- 已完成 Debian 12 Bookworm 基础安装、用户创建(ops 用户已加入 sudo)、网络配置
- 当前 SSH 默认监听 22 端口,能通过 VMware Workstation Pro 控制台或原有 22 端口登录
- 以 ops 用户登录(具有 sudo 权限)
- 全局约定:主机名 LinuxDC,IP 192.168.1.100/24,最终 SSH 端口改为 2222
详细步骤 🛠️
-
备份原始 SSH 配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak-$(date +%F) -
修改主要安全参数(推荐生产配置)
编辑配置文件:sudo nano /etc/ssh/sshd_config
查找或添加/修改以下关键行(建议全部覆盖默认值):
Port 2222 # 改为非标准端口 2222(全局约定)
PermitRootLogin no # 完全禁止 root 通过 SSH 登录
PasswordAuthentication no # 禁止密码登录(后续只允许密钥)
PubkeyAuthentication yes # 启用公钥认证(必须开启)
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
# 限制登录用户(只允许 ops 用户组成员)
AllowUsers ops
# 或 AllowGroups sudo
# 加强加密算法(可选,根据需求调整)
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
# 限制登录尝试(配合 fail2ban)
MaxAuthTries 3
LoginGraceTime 30
- 立即启用公钥登录(强烈推荐)
在本地电脑(你的 Windows/Mac 主机)生成密钥对(如果还没有):# 在你的本地电脑终端执行(非虚拟机内) ssh-keygen -t ed25519 -C "ops@yourworkstation" # 默认回车保存到 ~/.ssh/id_ed25519
将公钥复制到虚拟机 ops 用户:
# 本地执行(替换为实际 IP 和端口)
ssh-copy-id -p 22 ops@192.168.1.100
或手动复制:
# 在本地查看公钥
cat ~/.ssh/id_ed25519.pub
# 复制内容 → 在虚拟机 ops 用户下
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# 粘贴公钥内容,保存
chmod 600 ~/.ssh/authorized_keys
- 重启 SSH 服务并测试
sudo systemctl restart ssh sudo systemctl status ssh
从本地电脑测试新端口:
# 在你的本地电脑终端
ssh -p 2222 ops@192.168.1.100
如果连接成功 → 旧 22 端口可关闭(可选):
sudo ufw deny 22 # 后续章节配置防火墙
- 额外安全加固建议(本章预备,后续 fail2ban 章节会强化)
- 安装 sshguard 或 fail2ban(第 9 章)
- 使用密钥 + 禁用密码登录后,暴力破解基本失效
- 定期轮换密钥、监控 authorized_keys 文件变更
实践任务 🎯
- 将 SSH 端口改为 2222 并禁止 root 登录
- 配置 ops 用户的公钥认证,禁用密码登录(PasswordAuthentication no)
- 从宿主机使用新端口 2222 + 密钥登录虚拟机,确认成功
- 用
ss -tuln | grep 2222验证 SSH 只监听 2222 端口
自测问题 ❓
- 为什么生产环境强烈建议将 SSH 端口从 22 改为非标准端口?
PermitRootLogin no和PasswordAuthentication no组合后的主要安全提升是什么?- 如果忘记把公钥添加到 authorized_keys 会发生什么?如何恢复访问?
- 如何确认 SSH 服务是否正在使用新端口 2222 而不是 22?
总结 📌
完成了 SSH 的核心安全加固:端口变更 → 禁止 root + 密码登录 → 启用公钥认证。
这是 Linux 服务器暴露公网或内网时的第一道防线。后续第 9 章的 fail2ban 将进一步封堵暴力破解尝试,形成完整 SSH 防护体系。