更新于
接手别人搭的服务器,先查什么?招不起运维的创始人/PM 自救手册
接手了一台别人搭的服务器,第一件事是查清上面到底跑着什么。产品有了第一批用户,当初搭服务器的外包或前同事已经走了,交接只留下一个 IP 和一个密码。你不确定日志在哪、证书什么时候过期、出事该找谁,招一个全职运维又不现实。本文写给这样的创始人、PM 或“顺便管服务器”的开发者:先花一个小时把接手的服务器盘清楚,写成一页清单;再建立每周 10 分钟的只读检查;最后想好出事时找谁。
本文讲的是“接手之后怎么活下来”。如果你想知道上线后应该监控哪些指标,请看 小团队 VPS 监控清单。以下命令适用于常见 Linux VPS,全部是只读的;看不懂输出也没关系,先原样复制保存,再对照下文的解释。
1. 先确认“东西归谁”,再碰服务器
很多小团队出事,不是因为命令敲错,而是关键时刻找不到账号。先把下面这张表填出来,只记录在哪里、归谁,不要把密码和密钥本身写进表里:
| 项目 | 在哪里 | 登录账号归谁 | 谁能改 | 到期 / 续费 |
|---|---|---|---|---|
| 云服务器账号(含付款方式) | ||||
| 域名注册商与 DNS | ||||
| HTTPS 证书 | ||||
| 代码仓库与部署方式 | ||||
| 数据库与备份存放位置 | ||||
| 第三方服务密钥(邮件、支付、短信等) |
云账号和域名账号的所有者最好是公司,而不是某个已经离开的人;开启两步验证。
不要继续和别人共用同一个 root 密码。给每个需要登录的人单独的账号或密钥,离开时才能单独收回。
2. 盘点这台机器:上面到底跑着什么
系统和资源:
cat /etc/os-release
uname -r
uptime
nproc
free -h
df -h
这告诉你系统版本、内核、已运行多久、几核 CPU、多少内存和磁盘。它不能说明这些资源够不够用,那要看一段时间内的趋势。
正在运行的服务和监听端口:
systemctl list-units --type=service --state=running --no-pager
sudo ss -ltnp
列表里大部分是系统自带服务。重点找你认识的名字:
nginx、docker、mysql/mariadb、postgresql、redis,以及和你产品名相关的服务。ss -ltnp显示哪个进程在监听哪个端口。地址是0.0.0.0或[::]表示对所有网卡开放,如果云安全组也没挡,外网就能直接访问;127.0.0.1表示只有本机能访问。数据库端口对外开放通常是需要尽快找人评估的风险。
容器和其他进程管理方式:
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
docker compose ls
pm2 list
docker compose ls会列出正在运行的 Compose 项目和它们的配置文件路径,这通常就是“应用是怎么部署的”答案。加-a可以连已停止的项目一起列出。如果应用是 Node.js 且用 PM2 管理,
pm2 list需要用启动它的那个用户执行。命令不存在就说明没装,跳过即可。
网站入口(Nginx):
ls -l /etc/nginx/sites-enabled/ /etc/nginx/conf.d/ 2>/dev/null
sudo nginx -T 2>/dev/null | grep -E '^\s*(server_name|listen|proxy_pass|root)\s'
nginx -T 会输出完整的生效配置,这里只筛出域名、端口、转发目标和静态目录,帮你把“哪个域名 → 哪个端口 → 哪个服务”连起来。分享完整配置前要检查里面有没有内部地址或凭证。
定时任务和备份:
crontab -l
sudo crontab -l
ls -l /etc/cron.d/
systemctl list-timers --no-pager
sudo grep -rIl -E 'backup|dump|rsync|restic|borg' /etc/cron* /var/spool/cron 2>/dev/null
这里能找到备份脚本、证书续期、日志清理之类的任务。最后一条
grep只是按关键字粗筛,命中的不一定是你的业务备份(系统自带的一些任务也会命中),需要逐个打开看。找到备份任务后,要继续确认三件事:备份文件实际存在哪里、最近一次是什么时候、有没有人在别的机器上恢复过。备份和数据库放在同一块盘上,盘坏了或机器被删时会一起丢。
证书:
sudo certbot certificates
在你自己的电脑上也可以直接查线上证书的到期时间(把 example.com 换成你的域名):
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate -issuer
certbot certificates 只在服务器用 certbot 管证书时有结果;证书也可能由 CDN 或负载均衡管理,那就要去对应的控制台看。
谁能登录这台机器:
awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd
getent group sudo wheel
sudo find /root /home -name authorized_keys -exec wc -l {} \;
列出普通用户、有 sudo 权限的人,以及每个 authorized_keys 里大约有几把公钥(通常一行一把)。已经离开的人的账号和公钥,先记进清单,它们是需要你决定是否收回的第一批东西。按什么顺序收回才不会把自己锁在门外,见 外包或前员工走了,服务器权限怎么收回?。
3. 把结果写成一页清单
每个服务一行就够了:
| 服务 | 怎么运行(systemd / Docker / PM2) | 端口 | 配置在哪 | 日志在哪 | 怎么重启 | 谁最懂它 |
|---|
写不出来的格子,就是下次出事时最可能卡住的地方。优先把它们补上,或者问清楚当初搭建的人。
4. 每周 10 分钟的只读检查
uptime
free -h
df -h
df -i
systemctl --failed --no-pager
docker ps -a --format 'table {{.Names}}\t{{.Status}}'
再看一眼:最近一次备份是什么时候、证书还有多久到期。更完整的检查项和告警安排参见 小团队 VPS 监控清单。人不在电脑前时,可以用巡检加 Telegram 告警先收到通知。只收 Telegram 告警不需要把凭证存到云端;想直接从 Telegram 远程 SSH 排障,才需要把该服务器的凭证托管到云端,见 用 Telegram 收服务器告警。
告警里的数字是什么意思
| 数字 | 是什么 | 什么时候要紧 | 先看哪条命令 |
|---|---|---|---|
| load(负载) | 正在运行和排队等待 CPU/磁盘的任务数,uptime 里的三个数分别是 1、5、15 分钟平均 | 持续明显高于 CPU 核数,同时用户感觉变慢;短暂冲高通常不要紧 | uptime、nproc |
| 内存 % | 已用内存占比。Linux 会把空闲内存拿来做缓存,所以这个数经常偏高 | 看 available 是否持续很低、swap 是否在增长,或内核日志里出现进程被杀 | free -h |
| 磁盘 % | 某个分区已用的容量 | 接近 100% 时写入会失败,数据库和日志最先出问题;增长速度比绝对值更重要 | df -h |
| inode % | 文件“个数”的额度,和容量是两回事 | 到 100% 时即使还有空间也建不了新文件,常见于大量小文件 | df -i |
没有适用于所有服务器的固定阈值,要和这台机器平时的数值比较。磁盘或 inode 告警时,先按 磁盘占用突然飙升 分流,不要急着删文件。
5. 出事时的升级路径
先收证据:按 凌晨两点网站打不开 的顺序跑一遍只读检查,把输出保存下来。有证据的求助,别人才帮得快。
再找人:事先存好当初搭建者、可以按次付费的外包或顾问、云厂商工单入口的联系方式。
临时给权限要可收回:给外部帮手单独的账号和密钥,不要给共享的 root 密码;结束后删除他的公钥、禁用账号,并轮换他接触过的密钥。有人离开时怎么收回,见 外包或前员工走了,服务器权限怎么收回?。
怀疑被入侵:不要自己先删东西,参见 服务器被入侵了吗?。
OpsMate 在这里能做什么
OpsMate 把 SSH 终端和 AI 放在同一个页面。盘点这一步,你可以把上面的命令一条条手敲进去;记不住命令时,也可以用自然语言问 AI,比如“看看这台机器上在跑哪些服务、监听哪些端口、有哪些定时任务,先别改任何东西”。AI 会提出排查命令,可以用 ps、df、ss、docker、journalctl 这类命令做检查;命令跑完后,点击「需要分析」,AI 会根据输出帮你解读。命令和输出都显示在终端里,由你自己阅读和核对。清单本身需要你来整理和维护,AI 的回答只是帮你少记命令、看懂输出。
边界:
它不能替代备份策略、安全加固和架构决策,复杂变更仍需要专业的人。
AI 以排查为主:危险命令会被拦截。重启服务、日志轮转这类低风险处置默认会自动执行。删除、改配置都由你决定。OpsMate 自己会做什么、不会做什么,以官网 常见问题 为准。
桌面端默认把 SSH 凭证保留在本机,但这不等于所有数据都留在本机:点击「需要分析」后,命令输出会发送给云端 AI 分析。输出里有密钥或客户信息时,先脱敏,再把脱敏后的片段交给 AI。
说明性示例
说明性示例(不是真实客户案例):一位创始人接手了一台 4 GB 内存的 VPS。盘点发现:Nginx 把两个域名分别转发到 3000 和 3001 端口;docker compose ls 显示一个 Compose 项目,里面有 web、worker 和 postgres 三个容器;ss -ltnp 显示 postgres 的 5432 端口监听在 0.0.0.0;root 的 crontab 每天凌晨 3 点执行 pg_dump,备份文件写在同一块盘上,没有复制到别处;证书由 certbot 的 systemd timer 续期,还有 40 天到期;authorized_keys 里有 3 把公钥,其中 2 把没人能说清属于谁。清单上最需要优先处理的是:备份没有异地副本且从未演练恢复、数据库端口可能对外暴露、来历不明的公钥。这三件都是需要决定的变更(复制备份到别处、调整安全组或数据库监听、收回公钥),应该先评估影响、准备回退,再动手,必要时请专业的人一起做。
AI 排查提示词
我刚接手这台服务器,不清楚上面跑着什么。请先只做检查、不做任何改动,看看:系统版本和资源概况、正在运行的服务、监听端口及其对应进程、Docker 容器和 Compose 项目、Nginx 的域名与转发目标、定时任务和 systemd timer、可能的备份任务、证书到期时间,以及有哪些用户和 SSH 公钥。请整理成一份清单草稿,标出哪些是已确认的、哪些是推测、还缺什么信息。不要修改、删除或重启任何东西;如果发现需要处理的风险,先说明影响和回退方案,等我确认。
试用
每月免费 500 次 AI 调用;服务器数量不限。桌面端默认把 SSH 凭证保留在本机。
需要帮助理解排查结果?
OpsMate 帮助开发者和运维人员用 AI 辅助排查,由你核对证据。点击「需要分析」后,命令输出会发送给云端 AI 分析,请先去除敏感信息。
免费开始 本地凭证桌面端