这是一套完整的 Linux 服务器初始化 + 加固流程,从「本地生成 SSH 密钥」一路做到「面板只监听 127.0.0.1 + Fail2ban 自动封禁」。整体顺序如下:

本地生成 SSH key → 公钥添加到云控制台 → 购买服务器(绑定密钥)
→ VNC/Workbench 验证密钥已注入 → SSH 登录加固
→ 安装 1Panel → 仅监听 127.0.0.1 → UFW + Fail2ban

第一步:本地生成 SSH 密钥

在你自己的电脑(不是服务器)上执行:

# 推荐 ed25519(更快更安全)
ssh-keygen -t ed25519 -C "your-email@example.com"

# 或传统 RSA 4096
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
  • 一路回车使用默认路径(~/.ssh/),passphrase 可设可不设。
  • 生成后查看公钥(要复制到云控制台的就是这个 .pub 内容):
cat ~/.ssh/id_ed25519.pub

输出形如:ssh-ed25519 AAAA...xxx your-email@example.com

私钥 id_ed25519(不带 .pub)永远不要外传,只留本地。


第二步:把公钥添加到云服务器控制台

以腾讯云为例:

  1. 控制台 → 搜索 「SSH 密钥 / 密钥对」 → 「创建密钥」。
  2. 选择 「使用已有公钥」,把第一步 cat 出来的公钥整行粘贴进去,命名保存。
  3. 这样买服务器时就能直接绑定这个密钥。

如果你用的阿里云/华为云等,也有类似的「密钥对」功能,操作一致:创建密钥 → 粘贴公钥。


第三步:购买服务器并绑定密钥

  1. 购买 CVM / 轻量应用服务器,镜像选 Ubuntu。
  2. 在 「登录方式 / 安全设置」 处,选择 「已有密钥对」,选第二步创建的密钥。
  3. 记住默认登录用户名:Ubuntu 镜像默认是 ubuntu(不是 root)。

云厂商会在开机时通过 cloud-init 把公钥注入到该用户的 ~/.ssh/authorized_keys 里。


第四步:VNC/Workbench 登录,确认密钥真的注入进去了

买好后,先别急着用 SSH 连,用控制台的网页远程登录验证一下:

  1. 控制台 → 实例 → 「登录」 → 选 VNC 或 Workbench(网页远程连接)。
  2. 登录进去后,确认当前用户和密钥:
whoami                         # 应为 ubuntu
ls -la ~/.ssh/                 # 应有 authorized_keys 文件
cat ~/.ssh/authorized_keys     # 对比内容,是否与你本地 id_ed25519.pub 一致
  • 如果 authorized_keys 里能对上你的公钥,说明注入成功 ✅
  • 顺带从本地验证密钥登录:
ssh -i ~/.ssh/id_ed25519 ubuntu@<服务器公网IP>

说明:公钥不在什么「sshd 文件夹」里,而是在用户主目录的 .ssh/authorized_keys(/home/ubuntu/.ssh/authorized_keys)。/etc/ssh/sshd_config 是服务配置,不是放 key 的地方。


第五步:SSH 登录策略加固

先备份再改:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

修改 / 新增这几项:

# 最多允许 3 次认证尝试
MaxAuthTries 3

# 禁止 root 直接登录
PermitRootLogin no

# 只允许 ubuntu 用户登录(系统初始化的非 root 用户)
AllowUsers ubuntu

改完校验语法并重载(不要关掉当前会话,先另开一个终端测试能登录再关):

sudo sshd -t                  # 语法检查,无输出即正常
sudo systemctl reload sshd    # 或 restart ssh

可选(进阶):确认密钥登录没问题后,再禁用密码登录,彻底防爆破:

PasswordAuthentication no

⚠️ 顺序很重要:先确认密钥能登录,再改配置,否则容易把自己锁在外面。


第六步:安装 1Panel(官网文档完整流程)

官方文档:https://1panel.cn/docs/installation/online/

一键安装命令(当前官方,非 root 用户带 sudo):

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

脚本会自动完成:安装 Docker、docker-compose、再装 1Panel 本体。过程要点:

  • 安装目录:/opt/1panel
  • 装完控制台会打印面板地址、端口、用户名、密码、安全入口,务必截图保存
  • 常用维护命令:
1pctl status       # 查看 1Panel 状态
1pctl user-info    # 查看面板登录信息(忘了可以重新看)
1pctl reset password   # 重置面板密码

第七步:让 1Panel 只监听 127.0.0.1(窗口最小化)

1Panel 默认监听 0.0.0.0,端口写在 /opt/1panel/conf/app.yaml 的 system.port(默认随机端口,以安装输出为准)。

目标:面板对公网不可见,只能通过 SSH 本地端口转发访问。

做法是「防火墙不放行面板端口」——UFW 默认放行回环接口(lo),所以面板端口对外关闭、本机 127.0.0.1 仍能访问:

# 只放行 SSH(22),面板端口不单独放行
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose

不要给 1Panel 端口加 ufw allow,它就不会暴露到公网。

从本地访问面板,用 SSH 本地端口转发:

ssh -L <端口>:127.0.0.1:<端口> ubuntu@<服务器公网IP>

例如端口是 30257:

ssh -L 30257:127.0.0.1:30257 ubuntu@1.2.3.4

然后本地浏览器打开:

https://127.0.0.1:30257/<安全入口>

1Panel 是 HTTPS 自签证书,浏览器会提示「不安全」,点「继续访问」即可。


第八步:UFW + Fail2ban(3 次失败封 24 小时)

Fail2ban 监测 SSH 登录失败,通过 UFW 防火墙封禁,策略:maxretry = 3、bantime = 24h。

sudo apt update
sudo apt install -y ufw fail2ban
sudo ufw allow OpenSSH
sudo ufw enable

新建 /etc/fail2ban/jail.local:

[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
banaction = ufw

[sshd]
enabled = true

启动并验证:

sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban

# 查看 sshd jail 状态
sudo fail2ban-client status sshd

# 被封禁的 IP 会出现在 ufw 里
sudo ufw status
  • maxretry = 3:10 分钟内失败 3 次即封
  • bantime = 24h:封禁 24 小时
  • banaction = ufw:封禁动作走 UFW(ufw insert 1 deny from <IP>)
  • sshd jail 的日志后端默认是 systemd(journald),Ubuntu 24.04 无需额外配置即可生效

安全清单(做完自查)

  • 公钥已注入 /home/ubuntu/.ssh/authorized_keys,本地密钥登录正常
  • PermitRootLogin no、AllowUsers ubuntu、MaxAuthTries 3 已生效
  • (可选)PasswordAuthentication no 已开启
  • 1Panel 安装成功,登录信息已备份
  • 面板端口未对公网放行,只能 ssh -L 本地转发访问
  • UFW 已启用,仅放行 22
  • Fail2ban 的 sshd jail 已启用,3 次失败封 24h

按这套流程走完,你的服务器就完成了「密钥登录 + 最小化暴露 + 自动防爆破」的基础初始化。