云服务器购买后怎么使用?从远程连接到环境部署的完整教程

云服务器创建成功后,控制台显示“运行中”并不代表它已经适合直接上线。首次使用至少要完成网络放行、SSH 登录、系统更新、普通用户创建、时区与交换空间配置,然后再安装 Nginx、Docker 和主机防火墙。顺序不当可能导致无法登录,也可能让未加固的服务直接暴露在公网。

这篇教程以 Linux 云服务器为例,分别给出 RHEL、CentOS、Rocky 系和 Debian、Ubuntu 系的命令。操作前建议先创建磁盘快照,并保持云控制台的远程终端可用。涉及 SSH 与防火墙的变更,应始终保留当前会话,再开第二个终端验证成功,不能在未验证时关闭唯一连接。

首次连接前准备密钥、密码和安全组

创建实例时通常可以选择密钥对或密码。密钥登录使用公钥加密,服务器只保存公钥,私钥留在管理员设备上;密码登录依赖密码复杂度和服务端策略,更容易受到口令猜测。生产环境优先使用密钥,密码可作为受控的临时手段,但不要把密码或私钥发到聊天、工单和代码仓库。

如果尚无密钥,可在 Windows PowerShell 或 Windows Terminal 中生成 Ed25519 密钥:

ssh-keygen -t ed25519 -C "cloud-admin"

按提示保存后,默认私钥通常位于当前用户目录的 .ssh/id_ed25519,公钥是同名的 .pub 文件。创建云服务器时应上传公钥内容,绝不能上传私钥。若平台只支持创建并下载私钥,应立即把文件移动到受保护目录,并准备加密备份;私钥一旦泄露就应更换,而不是只修改文件名。

Linux 或 macOS 客户端需要限制私钥权限,否则 OpenSSH 会拒绝使用:

chmod 600 ~/.ssh/id_ed25519

Windows 自带 OpenSSH 会检查访问控制列表。若下载的私钥继承了其他用户权限,可在 PowerShell 中收紧权限,其中 $key 要改为实际路径:

$key = "$HOME\.ssh\cloud-server.pem"
icacls $key /inheritance:r
icacls $key /grant:r "$($env:USERNAME):(R)"

然后配置云平台安全组。安全组位于实例外部,是第一层网络访问控制。首次只应放行必要规则:

方向 协议与端口 来源或目标 用途
入站 TCP 22 管理员当前公网地址 /32 SSH 管理
入站 TCP 80 0.0.0.0/0 和需要时的 IPv6 全网 网站 HTTP,上线时再开
入站 TCP 443 0.0.0.0/0 和需要时的 IPv6 全网 网站 HTTPS,上线时再开
出站 按业务需要 软件仓库、时间同步和业务目标 更新与访问外部服务

不要为了省事放行所有入站端口。数据库的 3306、6379 等端口通常只对私有网络或指定应用安全组开放,不应直接暴露公网。如果管理员公网地址经常变化,可使用企业 VPN、堡垒机或临时调整来源规则,不要长期把 SSH 开给全网。

实例还必须有可达地址。公网登录需要绑定公网地址或经网关转发;只有私网地址的服务器,应从同一私有网络的堡垒机进入。确认安全组、路由和地址后再尝试连接,避免把网络不通误判为密码错误。

使用 Windows 终端或 SSH 客户端登录

镜像的默认用户名由发行版与平台决定,常见值包括 root、ubuntu、debian、rocky、centos 或 ec2-user。不要逐个暴力尝试,应查看创建页面或镜像说明。以下用 SERVER_IP 和 LOGIN_USER 作为占位符。

Windows PowerShell、Windows Terminal、Linux 与 macOS 都可以使用 OpenSSH:

# 密钥登录
ssh -i ~/.ssh/id_ed25519 LOGIN_USER@SERVER_IP

# 若客户端使用默认密钥,可省略 -i
ssh LOGIN_USER@SERVER_IP

在 PowerShell 中也可显式写 Windows 路径:

ssh -i "$HOME\.ssh\cloud-server.pem" LOGIN_USER@SERVER_IP

第一次连接会显示主机指纹。应先在云控制台或可信渠道核对指纹,再输入 yes 保存。若实例重装后出现主机密钥变化提示,先确认确实发生了重装,确认无误后再删除旧记录:

ssh-keygen -R SERVER_IP

这条命令会移除该地址对应的已知主机记录。若并未重装却突然提示指纹变化,应停止连接并排查中间人攻击、地址回收或 DNS 指向变化,不能直接忽略。

平台提供初始密码时,可直接运行 ssh LOGIN_USER@SERVER_IP 后输入密码。终端不会回显星号,这是正常现象。登录后应尽快改为密钥,并使用 passwd 修改初始密码。不要随意开启 root 密码远程登录;若因兼容需求必须临时启用,应限制安全组来源,修改 /etc/ssh/sshd_config 前备份文件,并在完成后关闭。

登录失败时,可以增加客户端调试输出:

ssh -vvv -i ~/.ssh/id_ed25519 LOGIN_USER@SERVER_IP

Connection timed out 多数与安全组、路由、防火墙或地址有关;Permission denied 通常与用户名、私钥、公钥权限或服务端认证配置有关;Connection refused 可能表示 SSH 服务未监听该端口。优先根据错误分类排查,不要反复重装系统。

更新系统并创建普通管理用户

先查看系统身份和版本,避免对错误发行版执行命令:

cat /etc/os-release
uname -r

RHEL、CentOS、Rocky 系初始化

Rocky、较新 CentOS Stream 和现代 RHEL 通常使用 dnf:

sudo dnf upgrade --refresh -y
sudo dnf install -y sudo curl wget vim git tar unzip chrony
sudo systemctl enable --now chronyd

旧版 CentOS 可能使用 yum:

sudo yum update -y
sudo yum install -y sudo curl wget vim git tar unzip chrony
sudo systemctl enable --now chronyd

内核或底层库更新后,最好在维护窗口重启。重启前先确认业务未上线,并确保云控制台终端可用:

sudo reboot

重新登录后创建普通管理用户。下面使用 opsadmin,可替换为团队命名规范中的账号:

sudo useradd -m -s /bin/bash opsadmin
sudo passwd opsadmin
sudo usermod -aG wheel opsadmin

把当前登录用户的公钥复制给新用户。若公钥位于当前账号的 ~/.ssh/authorized_keys,可执行:

sudo install -d -m 700 -o opsadmin -g opsadmin /home/opsadmin/.ssh
sudo cp ~/.ssh/authorized_keys /home/opsadmin/.ssh/authorized_keys
sudo chown opsadmin:opsadmin /home/opsadmin/.ssh/authorized_keys
sudo chmod 600 /home/opsadmin/.ssh/authorized_keys

如果当前账号是普通用户且密钥文件路径不同,应使用实际路径。复制后从第二个终端登录并验证 sudo -v,确认成功前不要禁用原账号。

Debian、Ubuntu 系初始化

Debian 与 Ubuntu 使用 apt。先刷新索引再升级已安装软件:

sudo apt update
sudo apt upgrade -y
sudo apt install -y sudo curl wget vim git tar unzip ca-certificates chrony
sudo systemctl enable --now chrony

创建普通用户并加入 sudo 组:

sudo adduser opsadmin
sudo usermod -aG sudo opsadmin

复制密钥的命令与前面类似:

sudo install -d -m 700 -o opsadmin -g opsadmin /home/opsadmin/.ssh
sudo cp ~/.ssh/authorized_keys /home/opsadmin/.ssh/authorized_keys
sudo chown opsadmin:opsadmin /home/opsadmin/.ssh/authorized_keys
sudo chmod 600 /home/opsadmin/.ssh/authorized_keys

同样需要另开终端测试 ssh opsadmin@SERVER_IP 和 sudo -v。只有在新账号、密钥和 sudo 全部正常后,才考虑在 /etc/ssh/sshd_config 中关闭密码认证和 root 登录。修改前先备份:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sshd -t

sshd -t 无输出通常表示语法通过。修改配置后应再次执行语法检查,再重载服务。RHEL 系服务名通常为 sshd,Debian 系通常为 ssh:

# RHEL、CentOS、Rocky
sudo systemctl reload sshd

# Debian、Ubuntu
sudo systemctl reload ssh

若新会话失败,保持旧会话不要退出,恢复备份并重载。不要在未运行语法检查时直接重启 SSH 服务。

配置时区、时间同步和 swap

服务器日志、计划任务和数据库时间应有统一标准。分布式系统通常使用 UTC,国内单机业务也常用 Asia/Shanghai。关键是团队统一,并在日志中明确时区。查看与设置命令如下:

timedatectl status
sudo timedatectl set-timezone Asia/Shanghai
timedatectl status

前面安装的 Chrony 负责时间同步。可以检查同步状态:

chronyc tracking
chronyc sources -v

内存较小的实例可以配置 swap,避免瞬时内存峰值直接触发 OOM,但 swap 不能替代物理内存。数据库或低延迟应用频繁换页会明显变慢,因此应把它视为缓冲,并监控使用情况。先检查是否已有交换空间:

free -h
swapon --show

确认没有合适 swap 后,可以创建一个两吉字节交换文件。fallocate 在多数常见文件系统可用;若失败再使用 dd。执行前确认根文件系统至少有足够空闲空间:

df -h /
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon --show

若 fallocate 不受支持,可改用:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

确认启用成功后再写入开机配置,命令会避免重复添加同一行:

sudo sh -c 'grep -q "^/swapfile " /etc/fstab || echo "/swapfile none swap sw 0 0" >> /etc/fstab'
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf

vm.swappiness=10 只是常见起点,不是所有业务的最优值。若要回滚,先确认交换空间没有承载大量页面和系统内存足够,再执行 sudo swapoff /swapfile,删除 /etc/fstab 对应行和 sysctl 配置,最后再删除文件。内存不足时强行 swapoff 可能触发 OOM,必须在维护窗口操作。

安装 Nginx、Docker 并验证服务

安装 Nginx

RHEL、CentOS、Rocky 系使用以下命令:

sudo dnf install -y nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager

旧版 CentOS 可将 dnf 替换为 yum。Debian、Ubuntu 系使用:

sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager

在服务器本机先验证,不必立即开放公网:

curl -I http://127.0.0.1
sudo nginx -t

看到 HTTP 响应且 nginx -t 通过,说明服务与基础配置正常。配置文件常位于 /etc/nginx/nginx.conf。Debian、Ubuntu 常使用 /etc/nginx/sites-available/ 和 /etc/nginx/sites-enabled/,RHEL 系常在 /etc/nginx/conf.d/ 放置站点配置。

安装 Docker

Debian、Ubuntu 可以先使用发行版维护的 docker.io 包,版本可能落后于 Docker 官方仓库,但安装路径清晰:

sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo docker version
sudo docker run --rm hello-world

RHEL、CentOS、Rocky 系若采用 Docker 官方仓库,可执行:

sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker version
sudo docker run --rm hello-world

旧版 CentOS 使用 yum 时,可安装 yum-utils,再用 yum-config-manager 添加同一仓库并安装对应软件包。企业环境应先确认仓库来源、版本支持周期和合规要求,不能在生产机上盲目执行未知的一键安装脚本。

若希望普通用户执行 Docker,可将其加入 docker 组:

sudo usermod -aG docker opsadmin

用户需要重新登录才生效。必须注意,docker 组成员基本可以获得主机上的 root 级控制能力,不应把不受信任用户加入该组。权限要求严格时继续使用 sudo docker 或评估无根模式。

配置主机防火墙并完成上线检查

安全组与主机防火墙是两层控制,任意一层未放行都会导致访问失败。先确认 SSH 当前来源规则正确,再配置主机防火墙。操作期间必须保留现有 SSH 会话,并打开第二个终端做验证。

RHEL、CentOS、Rocky 通常使用 firewalld:

sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

旧版系统可将 dnf 替换为 yum。如果 SSH 使用了自定义端口,必须先添加实际端口规则,例如 sudo firewall-cmd --permanent --add-port=2222/tcp,确认新端口可登录后才能移除旧规则。回滚时可通过云控制台终端恢复规则,或使用 firewall-cmd --permanent --remove-service=http 后重新加载。

Debian、Ubuntu 可使用 UFW:

sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

风险提示:执行 ufw enable 前必须确认 OpenSSH 配置文件对应的是实际 SSH 端口。若使用自定义端口,应先执行类似 sudo ufw allow 2222/tcp。一旦误封,可从云控制台终端执行 sudo ufw disable 临时回滚,再修正规则。

最后依次检查监听端口、服务状态和公网访问:

sudo ss -lntp
systemctl --failed
curl -I http://127.0.0.1
journalctl -p err -b --no-pager

再从本地浏览器或终端访问服务器公网地址,验证 80 端口。若本机可访问而公网失败,应依次检查主机防火墙、安全组、网络访问控制、路由和公网地址。不要通过关闭所有防火墙长期解决问题,可以短时定位,但定位后要立即恢复最小放行规则。

上线前还应完成自动更新策略评估、监控告警、日志轮转、快照和异地备份。快照适合变更前快速回滚,但不能替代独立备份。至少做一次恢复演练,确认管理员在实例无法 SSH 时仍能通过控制台进入。

常见问题

SSH 一直超时,应该先查哪里?

先确认实例有可达公网地址,再检查安全组是否允许当前公网地址访问 22 端口,然后检查路由与主机防火墙。超时通常是网络路径问题,不是用户名或密码问题。

密钥登录成功后能立即关闭密码登录吗?

先创建普通用户、复制公钥并验证 sudo,再从第二个终端成功登录。还要确认团队有备用密钥和控制台救援方式。全部验证完成后再关闭,避免把自己锁在服务器外。

云服务器必须配置 swap 吗?

不是。内存充足且对延迟敏感的系统可以不使用,或者只保留小容量应急空间。小内存实例可配置 swap 缓冲突发,但如果持续使用,说明应用配置或实例内存需要调整。

安装 Docker 后为什么普通用户没有权限?

Docker 套接字默认由 root 和 docker 组访问。可使用 sudo docker,或把受信任用户加入 docker 组并重新登录。加入该组等同授予很高权限,应谨慎控制成员。

已放行安全组,网站为什么仍打不开?

还要确认 Nginx 正在监听正确地址、主机防火墙放行 80 或 443、域名解析正确,并且公网地址与路由可达。先用 curl http://127.0.0.1 验证应用,再逐层向外排查。

总结

  • 首次登录优先使用 SSH 密钥,安全组只允许管理员来源访问管理端口,不要全端口开放。
  • 系统更新后创建普通 sudo 用户,并在第二个会话验证密钥与权限,再调整 root 和密码登录策略。
  • RHEL、CentOS、Rocky 使用 dnf 或 yum,Debian、Ubuntu 使用 apt,不能混用发行版命令。
  • swap 只能缓冲内存峰值;Nginx 与 Docker 安装后都要验证服务、监听端口和开机启动状态。
  • 修改 SSH 与防火墙时保留当前会话、准备控制台回滚,并在上线前补齐监控、日志轮转和异地备份。