如何安全地通过 SSH 连接到服务器

一份关于通过 SSH 安全连接服务器的指南,涵盖了以下关键实践:│ 使用 SSH 密钥、禁用密码认证、更改默认端口、限制│ 用户访问,以及部署防火墙和入侵检测系统。

Beginner

使用 SSH(安全外壳协议)连接到服务器是系统管理员和开发人员的一项基础任务。虽然 SSH 提供了加密通道,但必须进行安全配置,以保护服务器免受未经授权的访问。本指南介绍了建立安全 SSH 连接的关键做法。

1. 使用基于 SSH 密钥的身份验证

SSH密钥比密码安全得多。它涉及一对加密密钥:私钥(保存在您的本地机器上)和公钥(放置在服务器上)。

  • 生成密钥:在本地机器上,使用 ssh-keygen 生成密钥对。 bash ssh-keygen -t rsa -b 4096 系统会提示您为私钥输入密码短语。请使用强密码短语。
  • 将公钥复制到服务器:使用 ssh-copy-id 轻松将公钥传输至服务器。 bash ssh-copy-id username@your_server_ip 该命令会将您的公钥追加到服务器上的 ~/.ssh/authorized_keys 文件末尾。

2. 禁用密码认证

一旦 SSH 密钥认证生效,请禁用密码登录以防止暴力破解攻击。

  • 编辑 SSH 配置:在服务器上打开 SSH 守护进程配置文件。 bash sudo nano /etc/ssh/sshd_config
  • 修改设置:查找并修改以下几行: PasswordAuthentication no # If you are using root login, ensure it's also disabled: # PermitRootLogin no
  • 重启 SSH 服务:重启 SSH 服务以应用更改。 bash sudo systemctl restart sshd

3. 更改默认 SSH 端口

默认 SSH 端口(22)是自动化扫描的常见目标。更改端口可减少不必要的流量。

  • 编辑 SSH 配置:/etc/ssh/sshd_config中,找到 Port 22 行,并将 22 为另一个未被占用的端口号(例如 2222). Port 2222
  • 更新防火墙:确保防火墙允许新端口的流量通过。 bash sudo ufw allow 2222/tcp sudo ufw delete allow ssh # Remove the old rule for port 22
  • 重启 SSH 服务: bash sudo systemctl restart sshd 连接时,您需要指定新端口: ssh -p 2222 username@your_server_ip.

4. 限制用户访问

将 SSH 访问权限仅限于必要用户。

  • 禁用 root 登录:设置 PermitRootLogin no/etc/ssh/sshd_config。请始终以普通用户身份登录,并使用 sudo 执行管理任务。
  • 允许特定用户/组:使用 AllowUsersAllowGroups 指令 sshd_config 中的或指令将特定账户加入白名单。 AllowUsers your_user another_user

5. 使用防火墙

配置服务器的防火墙(例如 ufw) 仅允许来自可信 IP 地址或网络的 SSH 连接。

  • UFW 示例: bash sudo ufw allow from trusted_ip_address to any port 2222 proto tcp # Or to allow from a specific subnet # sudo ufw allow from 192.168.1.0/24 to any port 2222 proto tcp 请记得同时开放应用程序所需的其他端口。

6. 部署 Fail2Ban

Fail2Ban 会扫描日志文件以检测恶意活动(如反复登录失败),并自动更新防火墙规则以封锁违规 IP 地址。

  • 安装 Fail2Ban: bash sudo apt install fail2ban
  • 配置:对于 SSH,它通常开箱即用,但您可以在 /etc/fail2ban/jail.local.

7. 保持软件更新

请定期更新服务器的操作系统和 SSH 软件,以修复已知的漏洞。

sudo apt update && sudo apt upgrade -y

通过实施这些措施,您可以显著增强 SSH 连接的安全性,并保护服务器免受未经授权的访问。