服务器如何配置SSH密钥登录提高安全性?
通过配置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
七、密钥管理最佳实践
-
备份密钥:将
~/.ssh/
目录打包加密存储 -
多设备登录:为每个设备生成独立密钥对
-
定期轮换:每3-6个月更换一次密钥
-
禁用过期密钥:删除服务器上
authorized_keys
中无用公钥