使用 SSH 密钥对实现无密码登录可以提高安全性,避免在网络中传输明文密码。以下是详细的配置步骤和安全加固措施。
1. 生成 SSH 密钥对
在本地计算机上生成 SSH 密钥对:
bash
复制
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示输入文件保存路径(默认为 ~/.ssh/id_rsa)和密码(可以选择不设置密码)。
2. 将公钥复制到服务器
使用 ssh-copy-id 命令将公钥复制到目标服务器:
bash
复制
ssh-copy-id username@your_server_ip
输入密码后,公钥将自动添加到远程服务器的 ~/.ssh/authorized_keys 文件中。
3. 测试无密码登录
尝试使用 SSH 登录服务器:
bash
复制
ssh username@your_server_ip
如果配置成功,您将能够无需输入密码即可登录。
4. 配置 SSH 服务
4.1 修改 SSH 配置文件
编辑 SSH 配置文件 /etc/ssh/sshd_config:
bash
复制
sudo nano /etc/ssh/sshd_config
进行以下设置:
- 禁用密码验证:
- bash
- 复制
- PasswordAuthentication no
- 禁用 root 登录:
- bash
- 复制
- PermitRootLogin no
- 更改 SSH 端口(可选,建议非标准端口):
- bash
- 复制
- Port 2222
4.2 重启 SSH 服务
保存更改并重启 SSH 服务:
bash
复制
sudo systemctl restart sshd
5. 安全加固措施
5.1 使用防火墙
启用防火墙,允许特定端口(如 2222):
bash
复制
sudo ufw allow 2222/tcp
sudo ufw enable
5.2 安装和配置 Fail2Ban
安装 Fail2Ban,防止暴力破解:
bash
复制
sudo apt install fail2ban # Ubuntu/Debian
sudo yum install fail2ban # CentOS/RHEL
配置 Fail2Ban,监控 SSH:
bash
复制
sudo nano /etc/fail2ban/jail.local
添加或修改以下内容:
ini
复制
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 600
重启 Fail2Ban:
bash
复制
sudo systemctl restart fail2ban
5.3 定期更新和监控
- 定期更新系统:确保操作系统和软件保持最新。
- bash
- 复制
- sudo apt update && sudo apt upgrade -y # Ubuntu/Debian sudo yum update -y # CentOS/RHEL
- 监控登录日志:定期检查 /var/log/auth.log 或 /var/log/secure,查看登录活动。
5.4 使用 SSH 密钥的额外安全性
- 为私钥设置密码:虽然无密码登录方便,但使用密码保护私钥可以增加安全性。
6. 总结
通过配置 SSH 密钥实现无密码登录并实施上述安全加固措施,可以有效提高服务器的安全性。定期检查和更新安全设置也是确保长期安全的重要环节。