15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
30.10.2024
2 +1

如何在Debian上安装和配置SSH服务器(完整指南)

SSH(安全外壳协议)是现代服务器管理中最基础的协议之一。它提供加密、经过身份验证的通道,用于远程访问和管理 Linux 服务器——使其成为系统管理员、开发人员以及任何运行远程机器的人不可或缺的工具。无论您是在管理 VPS 托管环境还是独立服务器,正确安装和加固 SSH 服务器都是您应该首先完成的任务之一。

在本综合指南中,您将学习如何在 Debian 上安装 OpenSSH、安全配置它、设置基于密钥的身份验证,以及应用最佳实践加固措施来保护您的服务器免受未经授权的访问。

前提条件

在开始之前,请确保您具备:

  • 基于 Debian 的服务器(Debian 10 Buster、11 Bullseye 或 12 Bookworm)
  • 具有 sudo 权限的非 root 用户,或用于初始设置的直接 root 访问权限
  • 对 Linux 命令行的基本熟悉
  • 对服务器的网络访问

第一步:更新系统并安装 OpenSSH 服务器

在安装任何软件之前,刷新软件包索引并将现有软件包升级到最新版本是一个好习惯。这可确保兼容性并减少安全漏洞。

sudo apt update && sudo apt upgrade -y

现在安装 OpenSSH 服务器软件包:

sudo apt install openssh-server -y

软件包管理器将下载并安装 OpenSSH 及所有必需的依赖项。安装完成后,SSH 服务通常会自动启动。

验证 SSH 服务是否正在运行

确认 ssh 服务处于活动状态并已启用:

sudo systemctl status ssh

您应该看到类似以下的输出:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since ...

如果服务未运行,请手动启动它并启用它在启动时运行:

sudo systemctl start ssh
sudo systemctl enable ssh

第二步:了解 SSH 配置文件

主要的 SSH 守护进程配置文件位于:

/etc/ssh/sshd_config

该文件控制 SSH 服务器行为的几乎每个方面——从监听的端口到允许的身份验证方法。在进行任何更改之前,请创建原始文件的备份:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

现在用文本编辑器打开该文件:

sudo nano /etc/ssh/sshd_config

以下各节将引导您了解最重要的配置选项。

第三步:加固 SSH 配置

3.1 更改默认 SSH 端口(推荐)

默认情况下,SSH 监听端口 22。这是众所周知的,自动化机器人不断扫描互联网上开放的端口 22 连接以尝试暴力破解攻击。将端口更改为非标准值可显著减少此类干扰。

找到以下行(可能以 # 注释掉):

#Port 22

取消注释并更改值:

Port 2222

> 注意:选择 1024 到 65535 之间且未被其他服务使用的端口号。常见的替代端口包括 2222、2200 或 4422。请记得相应地更新防火墙规则(见第五步)。

3.2 禁用 Root 登录(强烈推荐)

允许通过 SSH 直接进行 root 登录是一个重大安全风险。如果攻击者猜测或暴力破解了 root 密码,他们将获得对服务器的完全控制权。通过查找并修改以下指令来禁用它:

PermitRootLogin no

如果您需要执行管理任务,请以普通用户身份登录,并使用 sudo 提升权限。

3.3 限制 SSH 访问特定用户

您可以将允许通过 SSH 登录的特定用户账户列入白名单。这可防止未经授权的账户或系统账户被用作入口点:

AllowUsers your_username deploy_user

或者,您可以按组限制访问:

AllowGroups sshusers

3.4 禁用密码身份验证(设置密钥认证后)

一旦 SSH 密钥身份验证正常工作(见第六步),完全禁用基于密码的登录以消除暴力破解攻击向量:

PasswordAuthentication no

3.5 其他加固指令

添加或修改以下行以获得更强健的安全态势:

# Disable empty passwords
PermitEmptyPasswords no

# Limit authentication attempts per connection
MaxAuthTries 3

# Set idle session timeout (seconds)
ClientAliveInterval 300
ClientAliveCountMax 2

# Disable X11 forwarding if not needed
X11Forwarding no

# Use only SSH Protocol 2
Protocol 2

# Restrict to specific address family (IPv4 only example)
AddressFamily inet

您最终的 /etc/ssh/sshd_config 相关部分应如下所示:

Port 2222
PermitRootLogin no
MaxAuthTries 3
PasswordAuthentication no
PermitEmptyPasswords no
AllowUsers your_username
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2

第四步:验证配置并重启 SSH

在重启服务之前,始终测试配置文件是否存在语法错误。错误配置的 sshd_config 可能会将您锁定在服务器之外:

sudo sshd -t

如果没有返回错误,请通过重启 SSH 守护进程来应用更改:

sudo systemctl restart ssh

验证服务是否已干净地重启:

sudo systemctl status ssh

> ⚠️ 重要:在关闭当前 SSH 会话之前,打开第二个终端窗口并测试新配置。这样,如果出现问题,您仍然有一个活动会话来修复问题。

第五步:更新防火墙规则

如果您使用的是 UFW(简单防火墙)——Debian 上的默认防火墙工具——您需要允许新 SSH 端口上的流量。

如果您将端口更改为 2222:

sudo ufw allow 2222/tcp
sudo ufw reload

如果您保留了默认端口 22:

sudo ufw allow ssh
sudo ufw reload

检查当前防火墙状态:

sudo ufw status verbose

如果 UFW 尚未启用,请激活它(请确保先允许您的 SSH 端口以避免被锁定):

sudo ufw enable

第六步:设置基于 SSH 密钥的身份验证

SSH 密钥身份验证比基于密码的登录安全得多。它使用非对称加密——由私钥(在客户端机器上保密)和公钥(存储在服务器上)组成的密钥对。即使攻击者知道您的用户名,没有私钥也无法登录。

6.1 在客户端机器上生成 SSH 密钥对

在您的本地机器(而非服务器)上运行以下命令:

ssh-keygen -t ed25519 -C "your_email@example.com"

> 为什么选择 Ed25519?Ed25519 是一种现代椭圆曲线算法,与较旧的 RSA 算法相比,提供更好的安全性和性能。如果您的系统不支持它,请使用带有 4096 位密钥的 RSA:ssh-keygen -t rsa -b 4096

当提示时,选择保存位置(默认为 ~/.ssh/id_ed25519)并设置强密码短语以提供额外的保护层。

6.2 将公钥复制到服务器

使用 ssh-copy-id 将您的公钥安全传输到服务器:

ssh-copy-id -p 2222 username@your_server_ip

此命令将您的公钥附加到服务器上的 ~/.ssh/authorized_keys,并设置正确的权限。

如果 ssh-copy-id 不可用,您可以手动操作:

# On your local machine, display your public key:
cat ~/.ssh/id_ed25519.pub

# On the server, add it to authorized_keys:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key_here" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

6.3 测试基于密钥的登录

从您的客户端机器连接到服务器:

ssh -p 2222 username@your_server_ip

系统应提示您输入密钥密码短语(而非账户密码)。确认后,您将安全登录。

6.4 禁用密码身份验证

现在基于密钥的身份验证已正常工作,返回 /etc/ssh/sshd_config 并确保:

PasswordAuthentication no

重启 SSH 以应用:

sudo systemctl restart ssh

第七步:监控和维护 SSH 安全

安装和配置 SSH 不是一次性任务。持续监控对于检测入侵尝试和维护安全环境至关重要。

检查失败的登录尝试

sudo journalctl -u ssh | grep "Failed password"

或使用 lastb 查看失败的登录尝试:

sudo lastb | head -20

安装 Fail2Ban 以阻止暴力破解攻击

Fail2Ban 监控日志文件并自动封禁显示恶意行为的 IP 地址(例如反复失败的登录尝试):

sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

为 SSH 创建本地 jail 配置:

sudo nano /etc/fail2ban/jail.local

添加以下内容:

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

重启 Fail2Ban 以应用:

sudo systemctl restart fail2ban

保持 OpenSSH 更新

定期更新 OpenSSH 以修补已知漏洞:

sudo apt update && sudo apt upgrade openssh-server -y

连接到 SSH 服务器:快速参考

场景命令
默认端口(22)ssh username@your_server_ip
自定义端口ssh -p 2222 username@your_server_ip
指定身份文件ssh -i ~/.ssh/id_ed25519 username@your_server_ip
详细输出(调试)ssh -v username@your_server_ip
通过 SSH 复制文件scp -P 2222 file.txt username@your_server_ip:/path/

为 SSH 选择合适的托管环境

本指南中的步骤适用于任何基于 Debian 的服务器,但您使用的托管类型会影响您访问和管理环境的方式:

  • VPS 托管:带有 cPanel VPS 或其他 VPS 控制面板的 VPS 为您提供完整的 root SSH 访问权限以及图形化管理界面——非常适合既想要强大功能又想要便捷操作的用户。
  • 独立服务器:使用独立服务器,您拥有完整的硬件级控制权,使 SSH 配置更加关键,因为您独自负责机器的安全。
  • 共享托管:共享虚拟主机计划通常提供有限的 SSH 访问权限或不提供 SSH 访问,因为该环境由多个用户共享。如果 SSH 是必要条件,升级到 VPS 是推荐的路径。

结论

在 Debian 上安装和配置 SSH 服务器是任何系统管理员或使用远程 Linux 服务器的开发人员的基础技能。通过遵循本指南,您已经:

  • ✅ 在 Debian 上安装了 OpenSSH 服务器
  • ✅ 通过更改默认端口、禁用 root 登录和限制用户访问来加固 SSH 配置
  • ✅ 设置了基于 SSH 密钥的身份验证,实现无密码安全登录
  • ✅ 配置了防火墙规则以保护 SSH 端口
  • ✅ 实施了 Fail2Ban 以防御暴力破解攻击
  • ✅ 建立了监控和维护例程

经过适当加固的 SSH 服务器可显著减少您的攻击面,并为您提供可靠的加密网关来远程管理您的基础设施。无论您是刚开始使用第一台服务器,还是在加固生产环境,这些实践都是安全 Linux 系统的基本构建块。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用