
配置SSH Key实现无密码登录和安全加固,是提高 Linux 服务器安全性和操作效率的关键步骤。以下是从配置到加固的完整指南。
1. 什么是 SSH Key?
SSH Key 是一种基于公钥加密的身份验证方式。与传统的密码登录相比,SSH Key 更加安全,由于:
密钥对由一个私钥和一个公钥组成。
私钥保存在客户端,公钥存储在服务器。
私钥加密的内容只能由对应的公钥解密,确保身份验证的安全性。
2. 配置 SSH Key 实现无密码登录
2.1 生成 SSH Key
在客户端(本地电脑)生成密钥对:
bash
复制
ssh-keygen -t rsa -b 4096 -C “your_email@example.com”
-t rsa:指定加密算法(推荐使用 RSA 或 ed25519)。
-b 4096:指定密钥长度(RSA 推荐 4096 位)。
-C “your_email@example.com”:添加备注(方便管理密钥)。
生成过程提示:
系统会提示存储密钥文件的位置,默认保存为~/.ssh/id_rsa。
可以直接按回车使用默认路径,或自定义保存路径。
设置或跳过密钥的密码短语(提议设置,以增加安全性)。
示例输出:
复制
Generating public/private rsa key pair.Enter file in which to save the key (/home/username/.ssh/id_rsa):
2.2 将公钥上传到服务器
使用ssh-copy-id命令将公钥上传到目标服务器:
bash
复制
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
~/.ssh/id_rsa.pub是生成的公钥文件。
username是服务器上的用户。
server_ip是服务器的 IP 地址。
如果服务器没有ssh-copy-id工具,可以手动复制公钥:
在客户端查看公钥内容:
bash
复制
cat ~/.ssh/id_rsa.pub
登录服务器,将公钥追加到~/.ssh/authorized_keys文件:
bash
复制
echo “公钥内容” >> ~/.ssh/authorized_keys
确保~/.ssh和~/.ssh/authorized_keys权限正确:
bash
复制
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
2.3 测试无密码登录
在客户端使用 SSH 登录服务器:
bash
复制
ssh username@server_ip
如果配置正确,将无需输入密码即可登录。
如果设置了密钥的密码短语,需输入该短语解锁私钥。
3. 安全加固 SSH 配置
无密码登录成功后,可以进一步优化 SSH 配置以提升安全性。
3.1 禁用密码登录
编辑服务器的 SSH 配置文件:
bash
复制
sudo nano /etc/ssh/sshd_config
修改以下参数:
ini
复制
PasswordAuthentication noChallengeResponseAuthentication noUsePAM no
PasswordAuthentication no:禁用密码登录。
UsePAM no:禁用基于 PAM 的认证。
重启 SSH 服务:
bash
复制
sudo systemctl restart sshd
3.2 更改默认 SSH 端口
编辑 SSH 配置文件:
bash
复制
sudo nano /etc/ssh/sshd_config
修改端口号(例如改为 2222):
ini
复制
Port 2222
重启 SSH 服务:
bash
复制
sudo systemctl restart sshd
连接时需指定新的端口:
bash
复制
ssh -p 2222 username@server_ip
3.3 限制允许登录的用户
编辑 SSH 配置文件:
bash
复制
sudo nano /etc/ssh/sshd_config
添加以下内容,只允许特定用户登录:
ini
复制
AllowUsers username1 username2
username1和username2是被允许的用户。
保存并重启 SSH 服务:
bash
复制
sudo systemctl restart sshd
3.4 禁用 Root 用户登录
在 SSH 配置文件中设置:
ini
复制
PermitRootLogin no
禁止直接使用root用户通过 SSH 登录。
重启 SSH 服务:
bash
复制
sudo systemctl restart sshd
3.5 启用防火墙并限制 SSH 访问
使用 UFW 配置防火墙(以端口 2222 为例):
bash
复制
sudo ufw allow 2222/tcpsudo ufw enable
仅允许特定 IP 地址访问:
bash
复制
sudo ufw allow from <trusted_ip> to any port 2222
3.6 启用 Fail2Ban 防护
Fail2Ban 是一个防止暴力破解的工具,可自动屏蔽多次失败的登录尝试。
安装 Fail2Ban:
bash
复制
sudo apt install fail2ban
配置 SSH 保护规则:
编辑/etc/fail2ban/jail.local:
ini
复制
[sshd]enabled = trueport = 2222maxretry = 5bantime = 3600
重启 Fail2Ban 服务:
bash
复制
sudo systemctl restart fail2ban
4. 密钥的管理与备份
4.1 私钥的安全存储
私钥应始终保存在本地,严禁上传到服务器或向外暴露。
使用密码短语加密私钥,防止丢失或被盗用。
4.2 定期更换 SSH 密钥
定期生成新的 SSH 密钥对,并替换旧的公钥。
旧密钥更换完成后,及时从服务器删除旧公钥。
4.3 授权多台客户端
如果需要从多台设备登录服务器,可以在~/.ssh/authorized_keys文件中添加多个公钥,每行一个。
5. 日常安全审计
5.1 查看 SSH 登录历史
检查最近的登录记录:
bash
复制
last
查看失败的登录尝试:
bash
复制
cat /var/log/auth.log | grep “Failed password”
5.2 检查活跃的 SSH 会话
查看当前登录的 SSH 会话:
bash
复制
who
5.3 设置登录警报
在~/.bashrc中添加以下内容,登录时发送邮件通知:
bash
复制
echo “SSH login: $(date) from $(who | awk {print $5} )” | mail -s “SSH Login Alert” your_email@example.com
6. 总结
通过配置 SSH Key 和安全加固,可以显著提高服务器的安全性。关键步骤包括:
生成并配置 SSH Key,实现无密码登录。
禁用密码登录,减少暴力破解的风险。
修改默认端口和限制访问,降低暴露面。
启用防火墙和 Fail2Ban,防止恶意攻击。
定期审计和备份密钥,确保密钥和服务器的长期安全。
按照以上实践,可以有效保护服务器免受未经授权的访问。













暂无评论内容