背景#
购买了阿里云 ECS 服务器(CentOS 7.9),准备部署 Hugo 博客和两个 Python Web 应用(Streamlit + Flask)。
这是整个系列的第一篇,记录刚拿到服务器时遇到的几个拦路问题:SSH 连不上、密码登录被拒、防火墙配置不知道该不该开。
本系列文章:
- SSH 连接与服务器初始化(本篇)
- Python 3.11 编译与 SSL 模块配置
- Hugo 博客部署与 Nginx 配置
- Python 包安装与 GCC 版本问题
- Supervisor 进程管理与应用启动
问题一:首次连接提示密钥指纹确认#
报错信息:
The authenticity of host '123.102.102.102 (123.102.102.102)' can't be established.
ED25519 key fingerprint is SHA256:xxx
Are you sure you want to continue connecting (yes/no/[fingerprint])?这是 SSH 的正常安全机制,首次连接新服务器会提示确认指纹,防止中间人攻击。直接输入 yes 回车即可,指纹会自动保存到本地 ~/.ssh/known_hosts,后续不再提示。
问题二:Permission denied (publickey)#
报错信息:
root@123.102.102.102: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).原因是阿里云服务器默认禁用密码登录,只允许密钥认证。
方式一:通过控制台开启密码登录(推荐)
- 登录阿里云 ECS 控制台,「重置实例密码」设置新密码
- 点击「远程连接」→「Workbench 远程连接」进入网页终端
- 执行以下命令:
sudo sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd之后就可以用密码 SSH 登录了。
方式二:使用密钥对登录
如果创建服务器时绑定了密钥对:
chmod 400 /你的私钥路径/xxx.pem
ssh -i /你的私钥路径/xxx.pem root@123.102.102.102问题三:FirewallD is not running#
报错信息:
FirewallD is not runningCentOS 7 的防火墙服务(firewalld)默认未启动。有两种处理方式:
方式一:启动系统防火墙
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload方式二:直接用阿里云安全组(更简单)
跳过系统防火墙,在阿里云控制台配置安全组入方向规则即可:
| 端口范围 | 授权对象 |
|---|---|
| 80/80 | 0.0.0.0/0 |
| 443/443 | 0.0.0.0/0 |
两种方式选一种就够,不需要都配。
问题汇总#
| 问题 | 根因 | 解决耗时 |
|---|---|---|
| SSH 指纹确认 | 首次连接的安全机制 | 1 分钟 |
| 密码登录被拒 | 默认禁用密码认证 | 5 分钟 |
| 防火墙未运行 | 服务未启动 | 3 分钟 |
附:服务器初始化脚本#
成功登录后执行,完成基础环境配置:
# 更新系统
sudo yum update -y
# 安装基础工具
sudo yum install -y epel-release
sudo yum install -y git wget curl vim yum-utils gcc gcc-c++ \
openssl-devel bzip2-devel libffi-devel zlib-devel
# 安装 Nginx
sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
# 安装 Supervisor(进程管理)
sudo yum install -y supervisor
sudo systemctl enable supervisord
sudo systemctl start supervisord