跳到主要内容

Ubuntu 服务器的踩坑清单:我踩过的坑

· 阅读需 4 分钟

整理自日常 Ubuntu 22.04 服务器初始化笔记。

自从我折腾了一台e5洋垃圾服务器,往里面装了pve虚拟机系统,当我每次新增ubuntu虚拟机时——我都会做几件事:配静态 IP、加固 SSH、装 Docker、按需做系统瘦身。这些步骤不复杂,但 cloud-init 会在两处让人踩坑:SSH「写了却不生效」、静态 IP「重启又变 DHCP」等问题就是我踩到的坑。

典型场景

新机器装完 Ubuntu 22.04 后,通常需要:

  1. 网络:配置静态 IP(内网服务器常见需求)
  2. 安全:禁止密码登录,只允许密钥
  3. 开发环境:Docker + Compose V2,配合 VSCode Remote 使用
  4. 系统维护:卸无用软件、虚拟化环境下装 Guest Agent

下面按这几条主线说明「为什么做」和「踩坑点」。从零安装系统Ubuntu Server 安装指南;PVE 导入镜像或装好后,继续看 Ubuntu 运维手册

网络:静态 IP 重启变 DHCP

内网虚拟机常要固定 IP。改 /etc/netplan/50-cloud-init.yamlnetplan apply 当时生效,重启却又回到 DHCP

原因是 cloud-init 在每次启动时会根据 datasource 重写 netplan。文件头注释写得很清楚:Changes to it will not persist across an instance reboot。正确做法是先禁用 cloud-init 的网络管理:

sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

写入 network: {config: disabled},再编辑 netplan 配静态 IP。完整示例见 静态 IP 与 Netplan 配置

注意

远程改 IP 前确保新地址可达,或保留 Proxmox / 云控制台,避免改错网段后失联。

安全:SSH 只允许密钥

第一件事是改 /etc/ssh/sshd_config,设 PasswordAuthentication noPubkeyAuthentication yes。改完重启 sshd,用密码试登录——居然还能登

排查后发现 Ubuntu 云镜像会在 /etc/ssh/sshd_config.d/50-cloud-init.conf 里写 PasswordAuthentication yes覆盖主配置。用下面命令搜一遍:

sudo grep -r PasswordAuthentication /etc/ssh/

50-cloud-init.conf 也改成 no 后,密码登录才真正被禁掉。完整步骤见 SSH 仅允许密钥登录

注意

改 SSH 前务必先配好公钥,并保留一个已登录会话,避免锁死。

开发环境:Docker + VSCode

Docker 建议走官方 APT 源装 CE 和 Compose V2 插件(docker compose),不要再用旧版独立 docker-compose

装完 Docker 后,VSCode Remote SSH 连上去常报 Docker 权限错误。正确做法是把用户加入 docker 组,而不是 chmod 666 /var/run/docker.sock——后者把 socket 暴露给所有用户,只适合临时调试。详见 VSCode Docker 插件权限

系统维护:按需处理

桌面版镜像可卸载 LibreOffice 省空间;要装 NVIDIA 驱动则先禁用 nouveau;Proxmox / KVM 虚拟机建议安装 qemu-guest-agent,便于宿主机获取 IP 和优雅关机。

以上命令集中在 系统维护速查 一页,按需查阅即可。

小结

事项文档
从零安装 Server安装指南
静态 IP / Netplan含 cloud-init 禁用
Docker + Compose V2安装步骤
VSCode Docker 权限用户组方案
SSH 密钥登录含 cloud-init 排查
软件 / 驱动 / 虚拟化系统维护速查

博客记「为什么和踩坑」,文档放「可复制命令」——需要动手时直接打开 Ubuntu 运维手册 即可。