使用 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执行管理任务。 - 允许特定用户/组:使用
AllowUsers或AllowGroups指令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 连接的安全性,并保护服务器免受未经授权的访问。