VPS 初始化实战:新云服务器到手后的配置清单
Ubuntu VPS 初始化清单:按顺序验证 sudo 用户、SSH 公钥与禁用密码登录,保留原终端演示,按需安装运行时及服务,并说明版本、权限和上线验收边界。
新买一台云服务器或 VPS 后,我不会急着部署业务,而是先完成一套固定的 Ubuntu 初始化配置。这份清单适合准备部署网站、API、Node/Nuxt 项目或轻量 AI 工具服务的人,重点放在 SSH 公钥、sudo 用户、终端环境和常用服务这些真正容易踩坑的地方。
一、创建用户
以下以受支持的 Ubuntu LTS、systemd、Bash 为范围。先保留云厂商控制台与现有管理员会话。前 3 步在有 sudo 权限的初始账号执行;若直接以 root 登录且没有 sudo 命令,可去掉命令前的 sudo。不要先关闭原入口。
sudo adduser --gecos "" work按提示为 work 设置本地密码;该密码用于后续 sudo,即使稍后禁用 SSH 密码登录也仍有用途。账号已存在时先核对身份,不要重复创建。
二、赋予 sudo 权限
sudo usermod -aG sudo work
id work
sudo visudo -cUbuntu 默认 sudo 组规则允许成员输入自己的密码执行管理命令;新组身份在新登录会话生效。这里不添加 NOPASSWD: ALL,也不把 %work(组规则)误写成 work 用户规则。后面必须在 work 的新会话验证 sudo -v。
三、配置 SSH 公钥登录
sudo install -d -o work -g work -m 700 /home/work/.ssh
sudo touch /home/work/.ssh/authorized_keys
sudoedit /home/work/.ssh/authorized_keys
sudo chown work:work /home/work/.ssh/authorized_keys
sudo chmod 600 /home/work/.ssh/authorized_keys用 sudoedit 添加本地公钥文件(例如 id_ed25519.pub)的完整一行,保留已有合法公钥;私钥留在本地。700/600 是推荐权限,属主、上级目录可写权限、sshd 策略也会影响登录。
在本地另一终端执行(替换 SERVER_IP),确认只用公钥也能登录:
ssh -o PreferredAuthentications=publickey -o PasswordAuthentication=no work@SERVER_IP进入新会话后验证身份与 sudo;成功后才继续:
whoami
sudo -v验证后再禁用 SSH 密码与 root 登录
在 work 会话中编辑下面的配置片段。先确认主配置包含 sshd_config.d;Ubuntu 通常按文件名顺序读取,并对大多数项采用最先取得的值。云初始化文件和 Match 条件可能影响最终结果。
sudoedit /etc/ssh/sshd_config.d/00-local-access.confPubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin nosudo sshd -t
sudo sshd -T | grep -E '^(pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|permitrootlogin) '语法检查必须成功,应确认 PubkeyAuthentication 为 yes,PasswordAuthentication、KbdInteractiveAuthentication、PermitRootLogin 为 no;存在 Match 时还要用 sshd -T -C 指定真实用户与客户端地址检查。确认后重载,再从第三个终端测试公钥登录与 sudo;确认成功前保留原会话和云控制台。
sudo systemctl reload ssh四、安装必要软件包
先检查更新和重启要求,安排维护窗口后再升级。运行时和数据库按项目需要选择安装。
sudo apt update
apt list --upgradable
sudo apt upgrade
sudo apt install -y ca-certificates curl git jq less vim unzip lsof rsync build-essential
test ! -f /var/run/reboot-required || cat /var/run/reboot-required重启前确认 SSH 新入口、云控制台和 sudo 已验证;不要为了清单完整而安装暂时用不到的库或服务。
五、初始化终端环境
以下截图与 GIF 保留原作者的历史终端操作,展示的是 Readline 前缀搜索,不是本次完整安装验证。本次修订后的账户、SSH 和安装建议以文字步骤为准。从这里开始使用已验证的 work 登录会话,避免把配置写进 root 的 home。
这一步很多人会跳过,但配置好之后每天都在省时间。核心是两个配置文件:.bashrc 和 .inputrc。
.inputrc:让方向键有“记忆”
创建 ~/.inputrc,写入以下内容:
set match-hidden-files off
"\ep": history-search-backward
"\e[A": history-search-backward
"\e[B": history-search-forward立即生效:
bind -f ~/.inputrc~/.inputrc 文件bind -f ~/.inputrc 使配置生效重点是中间这三行。默认情况下按 ↑ 是从最近一条历史往前翻。配置之后是:先输入前缀,再按 ↑,只在匹配前缀的历史里搜索。
比如输入 git,再按 ↑,只会在 git 开头的历史命令里循环,不会跳到其他命令。实际效果:
git 后按 ↑,只在 git 命令中循环第一行 match-hidden-files off 会让一般 Tab 补全不主动列出隐藏文件;明确输入点号前缀时仍可补全隐藏文件。
.bashrc:终端基础配置
历史记录增强
export HISTCONTROL=ignoredups # 不记录连续重复的命令
export HISTTIMEFORMAT='%F %T ' # 历史命令显示时间戳设置后,带有时间戳记录的历史项可显示时间;它不是可靠的审计日志,也无法为原本没有时间戳的旧历史补出真实执行时间。
高频 alias
alias la='ls -Aalth' # 列全部文件,按时间排序,人类可读大小
alias tf='tail -f' # 看实时日志:tf /var/log/nginx/access.log
alias wget='wget -c' # 默认断点续传
alias grep='grep --color=auto'
alias vi='vim'
alias vih='sudo vim /etc/hosts' # 快速编辑 hosts
alias rscp='rsync -v -P -e ssh' # 带进度条的 scp时间戳互转(对接接口、查日志时常用)
date -u -d '2024-06-01 12:00:00 UTC' +%s # 1717243200(秒)
date -u -d @1717243200 '+%F %T %Z' # 2024-06-01 12:00:00 UTC提示符显示 Git 分支
Git 分支提示来自作者自定义 .bashrc 中的函数;上面的基础配置本身不会添加该功能。原配置的效果类似:
[work@hostname:/your/project] → main#作者原始 .bashrc 参考在此。先备份自己的文件,再逐项合并需要的函数;不要直接覆盖、source 未读过的脚本或覆盖个人 .gitconfig:mini-linux-env
# 可选:仅下载并阅读原作者的配置
git clone https://gitee.com/tetang1230/mini-linux-env.git "$HOME/mini-linux-env-review"
less "$HOME/mini-linux-env-review/.bashrc"六、安装 Go
先用 apt-cache policy 查看发行版提供的版本,并与项目 go.mod 的 go/toolchain 要求核对。若满足要求,可使用 Ubuntu 包管理安装:
apt-cache policy golang-go
sudo apt install -y golang-go
go version
go env GOPATH若版本不满足项目要求,按 Go 官方安装说明选择对应 CPU 架构、受支持版本并核对发布的校验和;不要继续复制旧 go1.22.4 示例,也不要把新包直接覆盖进已有 Go 目录。这里不强制更改 GOPROXY;若使用第三方模块代理,单独确认其可用性和信任范围。
七、安装 Node.js 与 Yarn
先按项目 engines 与官方发布计划选择受支持版本;不要仅凭奇偶数断言生命周期。下面固定 Node.js 24 分支作为示例,不声称它永远是最新 LTS。NodeSource 是第三方安装源,下载脚本后先阅读,再决定是否以管理员权限执行。
curl -fsSL https://deb.nodesource.com/setup_24.x -o /tmp/toolskit-nodesource-setup.sh
less /tmp/toolskit-nodesource-setup.sh
sudo bash /tmp/toolskit-nodesource-setup.sh
sudo apt install -y nodejs
node --version
npm --version核对 Node.js 发布计划与 NodeSource 支持说明。仅当项目使用 Yarn Classic 时,下面才是相应安装选项;现代 Yarn 应按项目 packageManager 字段与其文档安装。
npm install --global --prefix "$HOME/.local" yarn@1
export PATH="$HOME/.local/bin:$PATH"
yarn --version需要持久化 PATH 时,将 export 这一行加入 work 用户自己的 ~/.bashrc。用户目录前缀避免普通用户对 /usr 下全局 npm 目录没有写权限的问题。
八、按需安装 Nginx
这里使用 Ubuntu 软件源,减少额外仓库与签名配置。发行版包版本号较旧不等于没有安全维护;是否需要 nginx.org 的新特性应另按支持周期和模块需求判断。
sudo apt install -y nginx
sudo nginx -t
sudo systemctl enable --now nginx
curl -I http://127.0.0.1HTTP 本地响应只说明服务启动,不说明公网 DNS、TLS、防火墙或反向代理已经配置好。修改站点后先 nginx -t 成功,再 reload。
九、按需安装 MySQL
先确认 Ubuntu 源提供的版本满足项目要求。Ubuntu 包通常允许本机管理员通过 socket 认证进入 root 账户,不需要读取旧维护账号文件,也不需要强制切换 mysql_native_password。
apt-cache policy mysql-server
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
sudo mysql -u root进入 MySQL 后检查版本与认证插件:
SELECT VERSION();
SELECT user, host, plugin FROM mysql.user;
EXIT;业务使用独立数据库与最小权限账号,按应用连接方式配置认证;不要把 root 账号交给应用。安装成功不代表备份、恢复、访问控制已经完成。
十、按需安装 Redis
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli -h 127.0.0.1 ping
sudo ss -lntpPONG 仅证明当前本地连接可用。核对监听地址、protected-mode 与应用 ACL,不把 6379 或 MySQL 3306 直接开放给公网;如确需跨主机连接,另行设计网络与认证策略。
上线前还需要验证
这份清单提供初始化步骤,不等于已经具备生产可用性。确认云安全组和主机防火墙仅开放必要端口、SSH 新会话可靠,再按业务补齐 HTTPS、应用权限、备份恢复、监控告警和维护策略。本次修订只核对文档、代码顺序与语法,没有登录新服务器完成全流程重演。
2026-09-29 核对:Ubuntu OpenSSH 配置、Ubuntu MySQL 安装与认证。其他运行时的版本与平台支持在安装当天按所链接官方资料复核。
常见问题
新买 VPS 或云服务器后,第一步应该做什么?
先确认登录方式并创建日常操作用户,再配置 sudo 和 SSH 公钥登录。把权限和入口稳定下来后,再安装运行时和业务服务。
SSH 公钥登录为什么总是失败?
最常见原因是 .ssh 目录和 authorized_keys 权限不对。通常目录用 700,authorized_keys 用 600,并确保属主是实际登录用户。
VPS 初始化时一定要安装 Nginx、Node.js、MySQL 和 Redis 吗?
不一定。本文是面向网站、API、Nuxt/Node 项目和轻量服务的常用基线。如果只是静态站或临时测试机,可以按需删减。