所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 安全 虚拟服务器

在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 的用户)和初始密码
基本终端熟悉度能够运行命令并使用 nanovim 编辑文件

> 提示:如果您需要管理多个服务器或需要与 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

  1. 从 putty.org 下载并打开 PuTTY
  2. Host Name (or IP address) 字段中,输入您服务器的 IP 地址。
  3. 确认 Port 设置为 22Connection typeSSH
  4. 点击 Open
  5. 在提示时接受主机密钥指纹。
  6. 输入您的用户名和密码。

> 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

此命令:

  1. 使用密码认证连接到服务器。
  2. 在服务器上创建 ~/.ssh/authorized_keys(如果不存在)。
  3. 将你的公钥追加到该文件。
  4. 自动设置正确的权限。

手动方法(如果 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 -y

CentOS/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 基础设施配对,保持密钥备份,您将拥有一个安全、专业的服务器环境,经久耐用。