云服务器上手实践:Linux 实例初始化、SSH 安全加固与 Docker 环境配置
前言
拿到一台全新的云服务器后,很多人会直接开始装软件,结果过几天就发现:SSH 被暴力破解、端口直接暴露在公网、环境依赖互相冲突。实际上,从“能登录”到“适合长期开发”,中间有一套很值得固化的初始化流程。
本文以 Ubuntu 22.04 LTS 为例,整理一套可以直接复用的云服务器初始化实践。文中命令同样适用于华为云 ECS 等主流云主机,重点是思路和顺序,而不是某个平台特有的按钮位置。
一、创建普通用户,避免长期使用 root
首次通过控制台或 SSH 登录后,先创建一个日常使用的账号:
adduser deploy
usermod -aG sudo deploy
之后所有开发操作都用 deploy 用户完成,只有系统级配置才使用 sudo。这样既降低误操作风险,也方便审计和权限回收。root 账号只保留给救援和控制台使用。
二、配置 SSH 密钥登录
在本地生成密钥对(如果还没有):
ssh-keygen -t ed25519 -C "deploy@dev"
把公钥上传到服务器:
ssh-copy-id deploy@<服务器IP>
先确认免密登录成功,再修改服务器端配置。编辑 /etc/ssh/sshd_config.d/10-hardening.conf:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
检查配置语法并重载服务:
sudo sshd -t
sudo systemctl reload ssh
这里有一个常见坑:一定不要先关密码登录再测试密钥,否则很容易把自己锁在服务器外面。云厂商控制台的 VNC 登录可以作为兜底,但最好还是按“先验证、后关闭”的顺序操作。
三、用防火墙收口暴露面
Ubuntu 自带 ufw,配置成本很低:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
原则是只放行确实需要的端口。数据库端口(3306、5432、6379 等)不要直接对公网开放,应通过内网访问或 SSH 隧道连接。同时别忘了在云平台的安全组里做同样的限制——主机防火墙和安全组是两层独立防护,缺一不可。
四、安装 Docker 与 Compose
使用 Docker 官方源安装,后续升级更方便:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
把当前用户加入 docker 组,免去每次 sudo:
sudo usermod -aG docker $USER
newgrp docker
验证安装:
docker run --rm hello-world
docker compose version
五、跑一个示例服务验证链路
用 Nginx 验证端口、防火墙和容器网络是否打通:
docker run -d --name web --restart unless-stopped -p 80:80 nginx:stable
浏览器访问服务器公网 IP,看到 Nginx 欢迎页就说明整条链路正常。生产环境更推荐用 Compose 管理,配置可以纳入版本控制:
services:
web:
image: nginx:stable
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./conf.d:/etc/nginx/conf.d:ro
六、几项容易被忽略的日常维护
- 开启自动安全更新:
sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades - 定期查看登录失败记录:
sudo journalctl -u ssh --since "1 day ago" | grep -i failed - 重要数据不要只放在系统盘,按需挂载数据盘并配置快照
- 用
docker system df定期清理无用镜像和容器,避免磁盘被占满 - 修改任何远程配置前,先保留一个可用的 SSH 会话,不要一次性断开所有连接
小结
云服务器初始化的核心可以概括为三件事:最小权限、最小暴露面、可复现的环境。把上面这些步骤整理成初始化脚本或云初始化(User Data),下次开新机器时几分钟就能得到一台安全、可用的开发环境。比起每次手动重复,这种一次性投入的收益会随着机器数量增加而放大。
- 点赞
- 收藏
- 关注作者
评论(0)