云服务器创建成功后,控制台显示“运行中”并不代表它已经适合直接上线。首次使用至少要完成网络放行、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 与防火墙时保留当前会话、准备控制台回滚,并在上线前补齐监控、日志轮转和异地备份。
企业QQ咨询




