更新于

接手别人搭的服务器,先查什么?招不起运维的创始人/PM 自救手册

接手了一台别人搭的服务器,第一件事是查清上面到底跑着什么。产品有了第一批用户,当初搭服务器的外包或前同事已经走了,交接只留下一个 IP 和一个密码。你不确定日志在哪、证书什么时候过期、出事该找谁,招一个全职运维又不现实。本文写给这样的创始人、PM 或“顺便管服务器”的开发者:先花一个小时把接手的服务器盘清楚,写成一页清单;再建立每周 10 分钟的只读检查;最后想好出事时找谁。

本文讲的是“接手之后怎么活下来”。如果你想知道上线后应该监控哪些指标,请看 小团队 VPS 监控清单。以下命令适用于常见 Linux VPS,全部是只读的;看不懂输出也没关系,先原样复制保存,再对照下文的解释。

1. 先确认“东西归谁”,再碰服务器

很多小团队出事,不是因为命令敲错,而是关键时刻找不到账号。先把下面这张表填出来,只记录在哪里、归谁,不要把密码和密钥本身写进表里:

项目在哪里登录账号归谁谁能改到期 / 续费
云服务器账号(含付款方式)
域名注册商与 DNS
HTTPS 证书
代码仓库与部署方式
数据库与备份存放位置
第三方服务密钥(邮件、支付、短信等)

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

容器和其他进程管理方式:

docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
docker compose ls
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

证书:

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. 出事时的升级路径

  1. 先收证据:按 凌晨两点网站打不开 的顺序跑一遍只读检查,把输出保存下来。有证据的求助,别人才帮得快。

  2. 再找人:事先存好当初搭建者、可以按次付费的外包或顾问、云厂商工单入口的联系方式。

  3. 临时给权限要可收回:给外部帮手单独的账号和密钥,不要给共享的 root 密码;结束后删除他的公钥、禁用账号,并轮换他接触过的密钥。有人离开时怎么收回,见 外包或前员工走了,服务器权限怎么收回?。

  4. 怀疑被入侵:不要自己先删东西,参见 服务器被入侵了吗?。

OpsMate 在这里能做什么

OpsMate 把 SSH 终端和 AI 放在同一个页面。盘点这一步,你可以把上面的命令一条条手敲进去;记不住命令时,也可以用自然语言问 AI,比如“看看这台机器上在跑哪些服务、监听哪些端口、有哪些定时任务,先别改任何东西”。AI 会提出排查命令,可以用 ps、df、ss、docker、journalctl 这类命令做检查;命令跑完后,点击「需要分析」,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 分析,请先去除敏感信息。

免费开始 本地凭证桌面端

排障指南