服务器如何配置SSH密钥登录提高安全性?

发布于:2025-07-04 ⋅ 阅读:(21) ⋅ 点赞:(0)

通过配置SSH密钥登录替代密码登录,可大幅提升服务器安全性(避免暴力破解)。以下是详细操作指南:


一、生成SSH密钥对(本地操作)

1. 生成密钥
ssh-keygen -t ed25519 -C "your_email@example.com"  # 推荐ed25519算法
# 或使用RSA(兼容旧系统):
# ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 按提示设置密钥存储路径(默认~/.ssh/id_ed25519

  • 强烈建议设置密钥密码(Passphrase)

2. 查看公钥
cat ~/.ssh/id_ed25519.pub
# 显示类似:
# ssh-ed25519 AAAAC3Nz... your_email@example.com

二、上传公钥到服务器

方法1:使用ssh-copy-id(最简单)
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip
# 输入密码后自动部署
方法2:手动部署
# 登录服务器
ssh username@server_ip

# 创建.ssh目录(若不存在)
mkdir -p ~/.ssh && chmod 700 ~/.ssh

# 写入公钥
echo "ssh-ed25519 AAAAC3Nz..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

三、配置SSH服务端(关键安全设置)

sudo nano /etc/ssh/sshd_config
必须修改的配置项:
Port 2222  # 修改默认SSH端口(避免扫描)
PermitRootLogin no  # 禁止root直接登录
PasswordAuthentication no  # 禁用密码登录
PubkeyAuthentication yes  # 启用密钥登录
重启SSH服务:
sudo systemctl restart sshd

四、测试连接

ssh -p 2222 -i ~/.ssh/id_ed25519 username@server_ip
# 首次连接需输入密钥密码(若设置)

五、增强安全措施(可选但推荐)

1. Fail2Ban防护
sudo apt install fail2ban  # Debian/Ubuntu
sudo yum install fail2ban  # CentOS/RHEL

自动封禁暴力破解IP

2. IP白名单限制
# /etc/ssh/sshd_config 末尾添加:
AllowUsers username@your_ip
3. 多因素认证(MFA)
sudo apt install libpam-google-authenticator
google-authenticator

按提示完成配置后,在sshd_config启用:

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

六、故障排查

1. 连接被拒绝
  • 检查防火墙是否放行新端口:

    sudo ufw allow 2222/tcp  # Ubuntu
    sudo firewall-cmd --add-port=2222/tcp --permanent  # CentOS
  • 确认SSH服务运行:

    sudo systemctl status sshd
2. 密钥登录失败
  • 检查权限:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  • 查看SSH日志:

    sudo tail -f /var/log/auth.log

七、密钥管理最佳实践

  1. 备份密钥:将~/.ssh/目录打包加密存储

  2. 多设备登录:为每个设备生成独立密钥对

  3. 定期轮换:每3-6个月更换一次密钥

  4. 禁用过期密钥:删除服务器上authorized_keys中无用公钥