在VPS上连接和配置SSH:完整安全指南
Secure shell (SSH) 访问是专业服务器管理的基石。无论您是在部署 WordPress 网站、通过 Git 推送代码,还是管理自定义应用程序,SSH 都能为您提供一条加密的、经过身份验证的隧道,直接进入您的服务器。本综合指南将逐步指导您完成每个步骤——从首次连接到强化您的设置以抵御现实世界的攻击——这样您就可以自信地管理您的 VPS Hosting 环境。
为什么 SSH 安全很重要
每个公开可访问的服务器都面临着持续的自动化暴力破解尝试。在 VPS 上线后的几分钟内,机器人就会开始扫描端口 22 并尝试常见的用户名/密码组合。配置不当的 SSH 是攻击者最常见的入口点之一。
好消息是:进行一些有意的配置更改可以大幅减少你的攻击面。结合可靠的基础设施——例如 NVMe 支持的存储和内置 DDoS 保护——一个经过适当加固的 SSH 设置为你提供了一个快速、有弹性且真正安全的管理通道。
如果你还没有选择托管环境,请考虑探索包含完全 root 访问权限、专用资源和实现本指南中所有安全措施灵活性的 VPS 托管计划。
前置条件
开始之前,请确认您已准备好以下内容:
| 要求 | 详情 |
|---|---|
| 运行中的 VPS | 任何 Linux 发行版(Ubuntu、Debian、CentOS、AlmaLinux 等)以及已安装的操作系统 |
| SSH 客户端 | Linux/macOS:内置 ssh 命令。Windows:PuTTY、Windows Terminal 或 WSL |
| 服务器 IP 地址 | 在配置后在您的托管控制面板中提供 |
| 登录凭证 | 默认用户名(root 或启用 sudo 的用户)和初始密码 |
| 基本终端熟悉度 | 能够运行命令并使用 nano 或 vim 编辑文件 |
> 提示:如果您需要管理多个服务器或需要与 SSH 一起使用图形界面,请查看 VPS 控制面板,了解 cPanel、Plesk 和 DirectAdmin 等选项,这些选项可补充命令行访问。
通过 SSH 连接到您的 VPS
在 Linux 或 macOS 上
打开您的终端并运行:
ssh username@your_server_ip将 username 替换为您的实际用户名(新 VPS 通常为 root),将 your_server_ip 替换为您服务器的公共 IP 地址。
示例:
ssh root@203.0.113.45首次连接提示:
The authenticity of host '203.0.113.45 (203.0.113.45)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?输入 yes 并按 Enter。这会将服务器的主机密钥添加到您的 ~/.ssh/known_hosts 文件中。在后续连接中,SSH 将自动验证此指纹——如果它意外更改,应将其视为潜在的安全事件。
在提示时输入您的密码。
在 Windows 上使用 PuTTY
- 从 putty.org 下载并打开 PuTTY。
- 在 Host Name (or IP address) 字段中,输入您服务器的 IP 地址。
- 确认 Port 设置为
22且 Connection type 为SSH。 - 点击 Open。
- 在提示时接受主机密钥指纹。
- 输入您的用户名和密码。
> Windows 10/11 替代方案:Windows Terminal 和 PowerShell 都包含原生 OpenSSH 客户端。您可以使用与 Linux/macOS 完全相同的 ssh username@your_server_ip 语法——无需第三方工具。
加强SSH安全:分步配置
所有SSH行为由单个配置文件控制:
/etc/ssh/sshd_config使用提升的权限打开它:
sudo nano /etc/ssh/sshd_config逐步完成下面的每个加强步骤。进行所有更改后,您将重启一次服务 — 在下一部分中介绍。
步骤1:更改默认SSH端口
端口22是机器人首先扫描的端口。将SSH移至非标准端口可以消除日志中绝大多数的自动化噪音。
找到这一行:
#Port 22将其更改为您选择的端口(使用1024到65535之间未被其他服务使用的数字):
Port 2222删除#以取消注释该行。使用CTRL+X保存,然后Y,然后Enter。
> 重要:在重启SSH之前,请确保您的防火墙允许新端口。请参阅下面的防火墙说明。
更新您的防火墙(UFW示例):
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw reload更新您的防火墙(firewalld示例):
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload步骤2:禁用Root登录
允许通过SSH直接以root身份登录是一个重大安全风险。相反,应以普通用户身份登录,并在需要时使用sudo提升权限。
在sshd_config中,找到:
PermitRootLogin yes将其更改为:
PermitRootLogin no在禁用root登录之前,请确保您有一个具有sudo权限的非root用户:
# Create a new user
adduser adminuser
# Grant sudo privileges
usermod -aG sudo adminuser在禁用root登录并重启SSH之前,测试该用户是否可以登录并运行sudo命令。
步骤3:禁用密码认证(设置密钥后)
配置SSH密钥认证后(下一部分),完全禁用基于密码的登录以消除暴力破解风险:
PasswordAuthentication no还要确保设置了这些相关指令:
ChallengeResponseAuthentication no
UsePAM no步骤4:其他推荐指令
在sshd_config中添加或验证这些设置以获得全面的加强基线:
# Limit authentication attempts per connection
MaxAuthTries 3
# Disconnect idle sessions after 5 minutes
ClientAliveInterval 300
ClientAliveCountMax 2
# Disable empty passwords
PermitEmptyPasswords no
# Restrict SSH to specific users (replace 'adminuser' with your username)
AllowUsers adminuser
# Use only strong protocol version
Protocol 2
# Disable X11 forwarding if not needed
X11Forwarding no设置 SSH 密钥认证
SSH 密钥认证用密码学密钥对替代密码:一个私钥保存在本地机器上,一个公钥存储在服务器上。即使攻击者知道你的用户名,没有私钥也无法进行身份验证。
步骤 1:生成 SSH 密钥对(在本地机器上)
ssh-keygen -t ed25519 -C "your_email@example.com"> 为什么选择 Ed25519?它比旧的 RSA 算法更快、更安全。如果你的系统因兼容性需要 RSA,请改用 ssh-keygen -t rsa -b 4096。
系统会提示你选择保存位置(默认 ~/.ssh/id_ed25519 即可)并设置密码短语。始终设置密码短语 — 它会加密你的私钥,这样物理访问你的机器也不会自动危害你的服务器。
输出:
Your identification has been saved in /home/you/.ssh/id_ed25519
Your public key has been saved in /home/you/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com步骤 2:将公钥复制到你的 VPS
最简单的方法是使用 ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@your_server_ip此命令:
- 使用密码认证连接到服务器。
- 在服务器上创建
~/.ssh/authorized_keys(如果不存在)。 - 将你的公钥追加到该文件。
- 自动设置正确的权限。
手动方法(如果 ssh-copy-id 不可用):
# On your local machine, display your public key
cat ~/.ssh/id_ed25519.pub
# On your server, add it manually
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "paste-your-public-key-here" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys步骤 3:禁用密码前验证密钥登录
在确认密钥登录有效之前,不要禁用密码认证。打开一个新的终端窗口并测试:
ssh -i ~/.ssh/id_ed25519 username@your_server_ip -p 2222如果你成功连接而不被要求输入密码(仅在设置了密钥密码短语时才需要输入),则继续在 sshd_config 中禁用 PasswordAuthentication。
重启和验证 SSH 服务
在保存所有更改到 sshd_config 后,在重启前验证配置语法:
sudo sshd -t如果没有返回错误,重启 SSH 守护程序:
sudo systemctl restart sshd检查服务是否成功启动:
sudo systemctl status sshd您应该在输出中看到 Active: active (running)。
> 关键安全提示:在测试新配置时,在单独的窗口中保持当前 SSH 会话打开。如果出现问题,您现有的会话保持活动状态,您可以恢复更改。
测试您的安全配置
测试 1:使用您的密钥连接到新端口
从您的本地机器:
ssh username@your_server_ip -p 2222预期结果:您使用 SSH 密钥登录(如果您设置了密钥密码,系统会提示您输入密钥密码,但不会提示您输入服务器密码)。
测试 2:确认 Root 登录被阻止
ssh root@your_server_ip -p 2222预期结果:
Permission denied (publickey).或
root@your_server_ip: Permission denied测试 3:确认密码身份验证已禁用
ssh username@your_server_ip -p 2222 -o PubkeyAuthentication=no预期结果:
Permission denied (publickey).如果密码身份验证仍然启用,系统会提示您输入密码。
额外加固:Fail2Ban
Fail2Ban 监控日志文件,并自动封禁显示恶意活动迹象的 IP 地址 — 例如重复失败的 SSH 登录尝试。它是对上述 SSH 加固步骤的必要补充。
安装 Fail2Ban
Ubuntu/Debian:
sudo apt update && sudo apt install fail2ban -yCentOS/AlmaLinux/RHEL:
sudo dnf install epel-release -y
sudo dnf install fail2ban -y为 SSH 配置 Fail2Ban
创建本地覆盖文件(永远不要直接编辑默认的 jail.conf):
sudo nano /etc/fail2ban/jail.local添加以下内容:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
backend = %(sshd_backend)s调整 port 以匹配您的自定义 SSH 端口。保存,然后启用并启动 Fail2Ban:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban检查活跃的封禁和监狱状态:
sudo fail2ban-client status sshd备份您的 SSH 密钥和配置
被锁定的服务器是一个严重的问题。遵循这些做法来避免它:
- 备份您的私钥到加密密码管理器或离线存储。
- 在进行更改之前存储
sshd_config的副本:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak - 使用您的托管提供商的带外控制台(通过控制面板的 VNC/KVM 访问)作为失去 SSH 访问权限时的备用方案。
- 记录您的自定义端口——在服务器之间切换时很容易忘记
2222。
将 SSH 与正确的托管基础设施配对
安全的 SSH 配置只有与其下的基础设施一样强大。请考虑这些补充服务:
- 专用服务器 — 对于需要最大性能和完整硬件隔离的工作负载,专用服务器为您提供对物理层和软件层的完全控制,包括 SSH 配置。
- SSL 证书 — 使用受信任的 SSL/TLS 证书保护应用程序的面向网络的一侧,补充服务器后端的 SSH 安全性。
- 域名注册 — 与托管一起注册和管理您的域名,使配置基于 DNS 的访问控制和服务器主机名变得更加容易。
结论
正确配置的 SSH 设置是您可以对任何 Linux 服务器进行的最高影响力的安全改进之一。总结一下您已实施的内容:
| 安全措施 | 优势 |
|---|---|
| 自定义 SSH 端口 | 消除自动化端口 22 扫描 |
| 禁用 root 登录 | 从远程访问中移除最常被攻击的账户 |
| SSH 密钥认证 | 用密码学证明替代可猜测的密码 |
| 禁用密码认证 | 完全关闭暴力破解攻击向量 |
| Fail2Ban | 自动阻止持续攻击者 |
MaxAuthTries 和超时 | 限制来自缓慢或分布式攻击的暴露 |
这些措施协同工作以创建分层防御——每一项本身都很有意义,组合使用时强度明显更高。
无论您运行单个 WordPress 站点还是管理一群应用服务器,从强化的 SSH 配置开始可以让您掌握控制权。将其与可靠的 VPS Hosting 基础设施配对,保持密钥备份,您将拥有一个安全、专业的服务器环境,经久耐用。
