一台刚开通的 VPS,通常已经允许 root 和密码登录。此时安装 Docker、面板和网站很快,但你还不知道三个关键情况:
-
系统现在开放了哪些端口; -
SSH 和防火墙改错后,能不能重新进去; -
服务器出故障时,哪些数据可以恢复。
下面这 8 项检查不会把服务器变成“绝对安全”。它们能留下部署前基线,收紧不需要的入口,并验证登录和恢复路径。
本文以 Ubuntu、Debian 和 RHEL 系发行版为例。旧服务器或正在承载业务的机器,需要先评估影响和维护窗口,不能照着新服务器流程批量执行。

先登录云厂商控制台,找到:
-
Web 控制台、VNC 或串口登录; -
救援模式和重置密码入口; -
快照、备份和重装入口; -
当前安全组规则。
保持现有 SSH 会话在线。后面修改 SSH 或防火墙时,再打开第二个会话测试。新会话没有验证成功之前,不退出旧会话。
如果服务器只有 SSH,没有控制台或救援入口,先不要关闭密码登录,也不要一次修改 SSH 端口、防火墙和用户权限。
先执行一组只读命令:
cat /etc/os-release
uname -r
df -hT
df -ih
free -h
ip -br addr
ss -lntup
systemctl --failed
这些结果分别回答:
-
使用哪个发行版和内核; -
根分区、数据盘和 inode 是否充足; -
当前内存和 Swap 状态; -
网卡拿到了哪些地址; -
哪些 TCP、UDP 端口正在监听; -
是否已有启动失败的服务。
ss -lntup 值得逐行看:
-
`127.0.0.1:端口` 通常只接受本机访问; -
`0.0.0.0:端口` 表示监听全部 IPv4 接口; -
`[::]:端口` 表示监听 IPv6,部分程序也会同时接收 IPv4; -
数据库、管理面板或未知程序监听公网接口时,先确认是否真的需要。
发现陌生进程后,可以继续查:
systemctl status 服务名
ps -fp 进程PID
不要看到陌生端口就直接结束进程。先确认它由谁启动、是否属于云厂商组件或现有业务。
Ubuntu 或 Debian:
sudo apt update
apt list --upgradable
sudo apt upgrade
RHEL、Rocky Linux 或 AlmaLinux:
sudo dnf check-update
sudo dnf upgrade
先看待升级列表。内核、OpenSSH、数据库、容器运行时等组件升级后,可能需要重启或重新验证服务。
Ubuntu、Debian 可以检查是否提示重启:
test -f /var/run/reboot-required && cat /var/run/reboot-required
生产服务器需要安排维护窗口。新服务器可以在安装应用前完成重启,再重新检查内核、监听端口和失败服务。
Ubuntu 或 Debian:
sudo adduser deploy
sudo usermod -aG sudo deploy
RHEL 系:
sudo useradd -m deploy
sudo passwd deploy
sudo usermod -aG wheel deploy
检查用户和权限:
id deploy
su - deploy
sudo whoami
sudo -l
sudo whoami 输出 root,说明 sudo 能执行。它不代表 SSH 密钥、远程登录和回退路径已经可用,后面还要单独测试。
在自己的电脑生成并上传密钥:
ssh-keygen -t ed25519
ssh-copy-id deploy@服务器地址
使用 deploy 用户和密钥打开第二个 SSH 会话。确认登录和 sudo 都正常,再准备调整 SSH。
Ubuntu 可以在 /etc/ssh/sshd_config.d/ 中保存自定义配置。常见设置包括:
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
配置文件写了什么,不等于服务最终采用了什么。先检查语法和生效值:
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|port'
sshd -t 没有输出,通常表示语法检查通过。sshd -T 会展示合并后的实际配置,可用于发现主配置和 sshd_config.d 片段之间的覆盖关系。
确认无误后,按系统实际服务名重载 SSH。继续保留旧会话,并再次建立新连接。

公网请求通常要经过两层入口:
云厂商安全组
↓
服务器系统防火墙
Ubuntu 常用 UFW。启用前先放行当前 SSH 端口:
sudo ufw allow 22/tcp
sudo ufw status verbose
sudo ufw enable
RHEL 系常用 firewalld:
sudo systemctl enable --now firewalld
sudo firewall-cmd --add-service=ssh
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --list-all
如果 SSH 使用的不是 22 端口,命令和安全组都要换成实际端口。RHEL 系还可能涉及 SELinux 端口策略。
防火墙显示“已放行”后,还要从服务器外部验证。
Windows:
Test-NetConnection 服务器地址 -Port 22
macOS 或 Linux:
nc -vz 服务器地址 22
外部测试成功,才能证明安全组、系统防火墙和服务监听同时匹配。数据库和管理后台没有公网访问需求时,不要开放给 0.0.0.0/0。
先看时间状态:
timedatectl status
timedatectl show -p NTPSynchronized --value
日志、证书、令牌和定时任务都依赖系统时间。单地区业务可以使用 Asia/Shanghai,跨地区服务器也可以统一 UTC。团队需要明确日志使用哪个时区。
备份至少覆盖:
-
应用配置和环境变量; -
数据库、上传文件和持久化目录; -
容器编排文件与挂载关系; -
SSH、防火墙和定时任务配置。
云快照适合快速回滚,但不应是唯一副本。部署前选一个文件或测试数据库,完成一次恢复。备份任务显示“成功”,只能证明任务运行过,恢复成功才说明副本可用。
上线前再检查一次:
systemctl --failed
journalctl -p warning -b --no-pager | tail -n 50
df -hT
df -ih
free -h
ss -lntup
至少要关注:
-
磁盘空间和 inode; -
OOM、服务失败和异常重启; -
对外监听端口; -
SSH 登录失败和异常账户; -
证书到期时间; -
备份最近一次成功时间和恢复抽查时间。

|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sshd -t
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本文相关命令基于Ubuntu Server、OpenSSH、UFW、Red Hat Enterprise Linux 9、firewalld。系统版本和云厂商不同,执行前以当前环境为准。




