这是一套完整的 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)永远不要外传,只留本地。
第二步:把公钥添加到云服务器控制台
以腾讯云为例:
- 控制台 → 搜索 「SSH 密钥 / 密钥对」 → 「创建密钥」。
- 选择 「使用已有公钥」,把第一步
cat出来的公钥整行粘贴进去,命名保存。 - 这样买服务器时就能直接绑定这个密钥。
如果你用的阿里云/华为云等,也有类似的「密钥对」功能,操作一致:创建密钥 → 粘贴公钥。
第三步:购买服务器并绑定密钥
- 购买 CVM / 轻量应用服务器,镜像选 Ubuntu。
- 在 「登录方式 / 安全设置」 处,选择 「已有密钥对」,选第二步创建的密钥。
- 记住默认登录用户名:Ubuntu 镜像默认是
ubuntu(不是 root)。
云厂商会在开机时通过 cloud-init 把公钥注入到该用户的
~/.ssh/authorized_keys里。
第四步:VNC/Workbench 登录,确认密钥真的注入进去了
买好后,先别急着用 SSH 连,用控制台的网页远程登录验证一下:
- 控制台 → 实例 → 「登录」 → 选 VNC 或 Workbench(网页远程连接)。
- 登录进去后,确认当前用户和密钥:
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
按这套流程走完,你的服务器就完成了「密钥登录 + 最小化暴露 + 自动防爆破」的基础初始化。