跳转至

08 - SSH 服务配置与安全优化 🔐

前提条件 ✅

  • 已完成 Debian 12 Bookworm 基础安装、用户创建(ops 用户已加入 sudo)、网络配置
  • 当前 SSH 默认监听 22 端口,能通过 VMware Workstation Pro 控制台或原有 22 端口登录
  • 以 ops 用户登录(具有 sudo 权限)
  • 全局约定:主机名 LinuxDC,IP 192.168.1.100/24,最终 SSH 端口改为 2222

详细步骤 🛠️

  1. 备份原始 SSH 配置

    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak-$(date +%F)
    

  2. 修改主要安全参数(推荐生产配置)
    编辑配置文件:

    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
  1. 立即启用公钥登录(强烈推荐)
    在本地电脑(你的 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

  1. 重启 SSH 服务并测试
    sudo systemctl restart ssh
    sudo systemctl status ssh
    

从本地电脑测试新端口:

# 在你的本地电脑终端
ssh -p 2222 ops@192.168.1.100

如果连接成功 → 旧 22 端口可关闭(可选):

sudo ufw deny 22    # 后续章节配置防火墙

  1. 额外安全加固建议(本章预备,后续 fail2ban 章节会强化)
  2. 安装 sshguard 或 fail2ban(第 9 章)
  3. 使用密钥 + 禁用密码登录后,暴力破解基本失效
  4. 定期轮换密钥、监控 authorized_keys 文件变更

实践任务 🎯

  1. 将 SSH 端口改为 2222 并禁止 root 登录
  2. 配置 ops 用户的公钥认证,禁用密码登录(PasswordAuthentication no)
  3. 从宿主机使用新端口 2222 + 密钥登录虚拟机,确认成功
  4. ss -tuln | grep 2222 验证 SSH 只监听 2222 端口

自测问题 ❓

  1. 为什么生产环境强烈建议将 SSH 端口从 22 改为非标准端口?
  2. PermitRootLogin noPasswordAuthentication no 组合后的主要安全提升是什么?
  3. 如果忘记把公钥添加到 authorized_keys 会发生什么?如何恢复访问?
  4. 如何确认 SSH 服务是否正在使用新端口 2222 而不是 22?

总结 📌

完成了 SSH 的核心安全加固:端口变更 → 禁止 root + 密码登录 → 启用公钥认证。
这是 Linux 服务器暴露公网或内网时的第一道防线。后续第 9 章的 fail2ban 将进一步封堵暴力破解尝试,形成完整 SSH 防护体系。