跳到正文
返回博客列表

VPS初始化一键工作流

更新于 2026-10-26 VPS脚本

顺序不是随手排的,是先能连、再测、再调、最后才建服务:

阶段 内容 为什么必须在这
0 公钥 + 改端口 + 关密码 一切的前提;先放行再改端口,先验证再关密码
1 TCP 质量检测 机器不行就不用往下折腾了
2 综合跑分留档 趁环境干净记录基线,调优后能对比
3 TCP 调优 要等检测有结论再动参数,否则测的是调优后的假象
4 Reality 目标筛选 建节点前先有候选,别建完再找 SNI
5 建节点 前面都确认过才暴露服务

阶段 0 · SSH 加固

三条铁律,顺序错了就锁死自己:

  1. 先放行端口,再改端口。
  2. 先确认公钥能登,再关密码。
  3. 改配置前备份,改完 sshd -t 校验,别带着坏配置 reload。

0.1 云厂商安全组先放行

控制台网络/防火墙里放行 TCP 30000。这一步只能手工做,脚本管不到。

Debian 13 最小安装默认不装 ufw 也不带 iptables 规则,能拦你的基本只有云安全组,所以这一步是唯一必做项。要上本机防火墙,装完 ufw 后先把 30000 放行、再把 22 关掉,顺序反了就断:ufw allow 30000/tcp && ufw allow 22/tcp && ufw enable && ufw delete allow 22/tcp。

0.2 装公钥

本地复制公钥内容(~/.ssh/id_ed25519.pub 全文),在 VPS 上粘进去:

mkdir -p /root/.ssh && chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys
echo 'ssh-ed25519 AAAA...你的公钥... me@pc' >> /root/.ssh/authorized_keys

改完确认行数对得上,别粘成两截:

awk '{print $1, $3}' /root/.ssh/authorized_keys

0.3 改端口

Debian 13 的 sshd 是普通 systemd 服务,端口直接改 /etc/ssh/sshd_config 就生效,没有 socket 激活那些绕路。

主配置里 Port 默认是注释掉的,先删干净再在文件头写一条:

cp -a /etc/ssh/sshd_config /root/sshd_config.bak
sed -i -E '/^[[:space:]]*#?[[:space:]]*Port[[:space:]]+[0-9]+/d' /etc/ssh/sshd_config
sed -i '1i Port 30000' /etc/ssh/sshd_config
sshd -t && systemctl reload ssh

Port 插在文件头,正好排在 Include /etc/ssh/sshd_config.d/*.conf 前面,不会被 drop-in 顶掉。

校验失败就写回去:cp -a /root/sshd_config.bak /etc/ssh/sshd_config && systemctl reload ssh。

只有换到 Ubuntu 23.04+ 才需要处理 socket 激活:systemctl is-enabled ssh.socket 有输出就别改 sshd_config,端口要写进 /etc/systemd/system/ssh.socket.d/10-port.conf(一行空 ListenStream= 清默认值 + 一行 ListenStream=30000),再 systemctl daemon-reload && systemctl restart ssh.socket。

0.4 验证再往下

ss 先看端口在听:

ss -lntp | grep 30000

当前会话别关,本地另开终端:

ssh -p 30000 root@<VPS_IP>

登进去了,才继续 0.5。登不进去就查安全组,然后用老端口回去改。

0.5 关密码登录

坑:云镜像常把 PasswordAuthentication yes 写在 /etc/ssh/sshd_config.d/*.conf 里,而 sshd 是「首次出现生效」,只改主配置会被 drop-in 覆盖,白改。 主配置和所有 drop-in 一起处理:

KbdInteractiveAuthentication 必须一起关,否则 PAM 那条路还能用密码进。

查实际生效值,有 passwordauthentication no 才算成功:

sshd -T | grep -iE '^(passwordauthentication|permitrootlogin|kbdinteractive)'

sshd -T 里还有 yes 就说明有 drop-in 在覆盖,grep -ri passwordauthentication /etc/ssh/sshd_config.d/ 揪出来改掉。


阶段 1 · TCP 质量检测

全国三网回程、大包、单线程测速,出图。跑得久,放 tmux 里,掉线不丢结果:

bash <(curl -fsSL https://raw.githubusercontent.com/ibsgss/TcpQuality/main/runTcpQuality.sh)

国内机换成加速入口:bash <(curl -fsSL https://tcpquality.ibsgss.uk/run)。

要打全量报告加 --all;只想看 IPv4 大包回程用 --only-large -v4。完整参数 --help。


阶段 2 · 综合跑分留档

在临时系统里跑,结束自己清理,不脏本机:

bash <(curl -sL https://run.NodeQuality.com)

出的分享链接存一份到本地笔记,阶段 3 调完再跑一次对比,别凭感觉判断有没有变好。


阶段 3 · TCP 调优

按每台机器实测推 BDP 和限速拐点,不套固定参数:

bash <(curl -fsSL https://raw.githubusercontent.com/Kylin010/tcpfit/main/tcpfit.sh)

装完弹菜单,1 全自动(会问带宽、测速对端、用途,之后跑到底)。只有 1G 小机顺手用菜单 4 加 swap 更稳。

坑:

  • 菜单需要 TTY,远程用 ssh -t <host> tcpfit,脚本里用子命令 tcpfit tune --role proxy --bw 500。
  • OpenVZ/LXC 上 tc、initcwnd 可能受限,跑完看 tcpfit status 对不对。
  • 首次改动前自动存快照,玩砸了 tcpfit rollback 原样写回;加过 swap 要连 swap 一起撤就 tcpfit rollback --purge-swap。
  • 只改 /etc/sysctl.d/99-tcpfit.conf 等自己的文件,不碰 /etc/sysctl.conf。

阶段 4 · Reality 目标筛选

先筛掉 CDN、热门大站、握手慢的,只留真能用的:

curl -fsSL https://raw.githubusercontent.com/G1oow/reality-checker-main/main/install.sh | bash

新版安装器自己探测出口 IP:单栈直接采用,双栈会让你选 1) IPv4 / 2) IPv6,选 IPv6 会自动附加 -6;探测不到才让你手输。装完打印完整命令并问「现在开始扫描?」,直接回车不跑。

它读的是 /dev/tty,所以 curl | bash 这种管道里也会正常提问,不用先落盘。

装完自己再跑一遍更省心(IP 和参数都在手上):

cd /root/rc-new && ./reality-checker-main auto <VPS_IP> --limit 5

双栈机只扫 IPv6 段就把 IP 换成 IPv6 并加 -6。

只认星级列:能 5 星就 5 星,同星级取握手最低的,取前 2~3 个各试连一次再定。结果恒为 0 就先 ./reality-checker-main check xtom.com.hk 自检,全 CDN 机房加 --allow-cdn。

详细用法和星级解读见同目录 Reality目标检测-小白教程.md。


阶段 5 · 建节点

(curl -LfsS https://raw.githubusercontent.com/G1oow/singbox-lite/main/singbox.sh -o /usr/local/bin/sb || wget -q https://raw.githubusercontent.com/G1oow/singbox-lite/main/singbox.sh -O /usr/local/bin/sb) && chmod +x /usr/local/bin/sb && sb

之后敲 sb 就进面板。首次要手动 [15] 装 sing-box 或 [16] 装 Xray,脚本不替你做主。

  • 主节点用 1,协议选 VLESS + TCP + Reality + Vision,SNI 填阶段 4 挑出来的。
  • 落地/中转/端口转发在 [18]。
  • 改完配置用 [12] 检查,服务挂了看 [9] 日志。

坑: 节点定义的分享链接和 clash.yaml 都在 /usr/local/etc/sing-box/,里面有 UUID、私钥、密码,别整目录往外传。


想省事:直接跑脚本

上面每步都有等价阶段,脚本做了备份、幂等、失败回滚和 sshd -t 校验:

scp -P 22 vps-init.sh root@<VPS_IP>:/root/
ssh root@<VPS_IP>

SSH_PUBKEY='ssh-ed25519 AAAA...' ./vps-init.sh 0   # 公钥 + 端口 + 放行
# 另开终端 ssh -p 30000 验证通过后:
./vps-init.sh 0b                                   # 关密码
./vps-init.sh 1 && ./vps-init.sh 2                 # 检测 + 跑分
./vps-init.sh 3                                    # 调优
./vps-init.sh 4                                    # 选 SNI
./vps-init.sh 5                                    # 建节点

DRY_RUN=1 只打印不动手,./vps-init.sh rollback 把 sshd 配置写回备份。


收尾检查

ss -lntp | grep 30000                    # 端口在听
sshd -T | grep -iE '^(passwordauth|permitroot)'  # 密码已关、root 仅密钥
tcpfit status                            # 调优生效
systemctl status sing-box                # 服务在跑

顺手做掉:时区 timedatectl set-timezone Asia/Shanghai、unattended-upgrades 开自动安全更新、journalctl --vacuum-size=200M 限制日志。


常见故障

现象 处理
改完端口连不上 安全组没放行 / sshd 没重载;用旧端口或控制台 VNC 进
公钥登不进,密码也被关了 控制台进,临时 PasswordAuthentication yes 后 reload,查 authorized_keys 权限和内容
sshd -T 还是 passwordauthentication yes 有 drop-in 覆盖,改 /etc/ssh/sshd_config.d/*.conf
Permission denied (publickey) 多了换行、粘了半截、或者粘成了私钥
socket 模式改了 sshd_config 没反应 端口得写 ssh.socket drop-in
reality-checker 全是 0 分 机房全 CDN,加 --allow-cdn,或换 --min-stars 3

工具出处:TcpQuality · NodeQuality · tcpfit · reality-checker-main · singbox-lite

测速报告示例

TcpQuality(TQ)报告:下面的七节图为功能演示,使用保留地址与示意数值,不是原报告的测试结果。点击「原报告」可查看原始数据;点击示意图可放大。

TcpQuality功能演示 · 示意数据原报告 ↗
IPv4回程
IPv4大包回程
IPv6回程
UDP回程
教育网回程
国际互联
单线程测速

NodeQuality(NQ)报告可通过卡片前往原站查看:

NodeQuality报告编号 hNBE0DB9dO0s5AF3FY01xCWXJ3eOVGA6打开报告 ↗

NodeQuality 报告在浏览器中渲染,构建期无法生成预览,点击上方链接查看。

© 2026 阁楼屋's Blog