引子
已经用了很多年的 Debian,持续不断地 root 裸奔。从只会改 SSH 端口,到使用密钥登录,今天开始我要切换到非 root 用户来使用了。于是写了一个初始化脚本,帮助自己快速完成 VPS 的安全加固。
功能
这个脚本帮助自己一键完成:
- 创建普通用户 - 自动加入 sudo 组,免密执行管理员命令
- 生成 SSH 密钥对 - Ed25519 算法,安全且现代
- 加固 SSH 配置 - 禁用 root 登录、禁用密码登录、修改默认端口
- 配置防火墙 - UFW 仅开放 SSH 端口
- 安装 fail2ban - 自动封禁暴力破解尝试
- 自动获取 IP - 无需手动输入,智能识别服务器地址
用法
一键执行
1 | curl -fsSL http://cdn.imhcg.cn/linux/shell/init.sh | bash -s -- --user 普通用户名 |
先下载再执行
1 | curl -fsSL http://cdn.imhcg.cn/linux/shell/init.sh -o init.sh |
使用流程
1 | # 以 root 登录新服务器 |
本地配置
脚本执行完成后,复制对应系统的一键命令在本地执行:
macOS / Linux
1 | # 一键保存私钥并配置 SSH |
Windows PowerShell
1 | [System.IO.File]::WriteAllBytes("$env:USERPROFILE/.ssh/my-vps", [System.Convert]::FromBase64String("LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZ...")); Add-Content -Path $env:USERPROFILE/.ssh/config -Value @' |
连接服务器
配置完成后,直接使用:
1 | ssh my-vps |
无需记住 IP、端口、用户名,一切都已经配置好了。
安全设计
为什么这样设计?
| 设计 | 理由 |
|---|---|
| 禁用 root 登录 | 减少攻击目标 |
| 禁用密码登录 | 防止暴力破解 |
| 仅密钥登录 | 强度远高于密码 |
| 修改默认端口 | 减少扫描骚扰 |
| sudo 免密 | 方便管理,但前提是已获得私钥 |
| 删除服务器私钥 | 私钥只存在于本地,服务器不留痕 |
与直接使用 root 的区别
- 身份隔离 - 日常操作普通权限,需要时才 sudo
- 审计日志 - sudo 操作有记录,便于追踪
- 误操作缓冲 - 需要显式 sudo,避免手滑
- 攻击链更长 - 获取私钥 → 登录 → sudo,多一道防线
技术细节
依赖处理
脚本会自动检测并安装缺失的依赖:
iproute2- 获取服务器 IPsudo- 权限管理openssl- 生成随机密码ufw- 防火墙fail2ban- 防暴力破解
密钥轮换
如果用户已存在,脚本支持密钥轮换:
1 | bash init.sh --user 普通用户名 |
旧密钥自动备份,新密钥立即生效。
兼容性
- 目标系统: Debian 12(主要),兼容 11/13
- 其他系统: 会提示确认,可能不兼容
源码
1 |
|
完整源码托管在:http://cdn.imhcg.cn/linux/shell/init.sh
最后
这个脚本帮我从 root 裸奔进化到安全的密钥登录 + 普通用户管理。Debian 用了这么多年,终于开始重视安全了 😅