配置 SSH Key 实现无密码登录和安全加固

配置 SSH Key 实现无密码登录和对 SSH 进行安全加固,是保障 Linux 服务器安全的重要步骤。以下是详细指南,涵盖生成 SSH Key、配置无密码登录以及 SSH 安全加固的完整流程。
1. 配置 SSH Key 实现无密码登录
1.1 什么是 SSH Key?
SSH Key 是一种基于非对称加密的身份验证方式,包含两个部分:
- 私钥:保存在客户端,不能泄露。
- 公钥:上传到服务器,用于验证身份。
与传统密码登录相比,SSH Key 更加安全,且支持无密码登录。
1.2 生成 SSH Key
在客户端(本地电脑)生成密钥对。
-
生成密钥对:
bashssh-keygen -t rsa -b 4096 -C "your_email@example.com"-t rsa:指定加密算法(RSA 是常用算法)。-b 4096:指定密钥长度,推荐 4096 位。-C:备注信息(通常是邮箱地址)。
-
生成过程:
系统会提示存储密钥的位置,默认路径为~/.ssh/id_rsa:Enter file in which to save the key (/home/username/.ssh/id_rsa):- 按回车使用默认路径,或指定自定义路径。
- 设置或跳过密码短语(建议设置密码短语以增加安全性)。
成功后会生成两份文件:
- 私钥:
~/.ssh/id_rsa。 - 公钥:
~/.ssh/id_rsa.pub。
1.3 上传公钥到服务器
将公钥上传到目标服务器。
-
使用
ssh-copy-id一键上传:bashssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ipusername:服务器登录用户名。server_ip:服务器 IP 地址。
成功后,公钥会被添加到服务器用户的
~/.ssh/authorized_keys文件中。 -
手动上传公钥(如果
ssh-copy-id不可用):- 查看公钥内容:
bash
cat ~/.ssh/id_rsa.pub - 登录服务器并将公钥追加到
authorized_keys文件:bashecho "公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- 查看公钥内容:
1.4 测试无密码登录
在客户端测试无密码登录:
bash
ssh username@server_ip
- 如果配置正确,将无需输入密码即可登录。
- 如果为私钥设置了密码短语,需输入该短语解锁私钥。
2. SSH 安全加固
完成无密码登录后,可以进一步优化 SSH 的安全性,防止暴力破解和未授权访问。
2.1 禁用密码登录
-
编辑服务器上的 SSH 配置文件:
bashsudo nano /etc/ssh/sshd_config -
修改以下配置:
iniPasswordAuthentication no ChallengeResponseAuthentication no UsePAM noPasswordAuthentication no:禁用密码登录。UsePAM no:禁用基于 PAM 的身份验证。
-
重启 SSH 服务:
bashsudo systemctl restart sshd
2.2 更改默认 SSH 端口
默认的 SSH 端口是 22,更改端口可以降低暴力破解的风险。
- 编辑 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
2.3 限制允许登录的用户
-
编辑 SSH 配置文件:
bashsudo nano /etc/ssh/sshd_config -
添加以下内容,仅允许特定用户通过 SSH 登录:
iniAllowUsers username1 username2username1和username2是被允许的用户名。
-
重启 SSH 服务:
bashsudo systemctl restart sshd
2.4 禁用 Root 用户登录
直接使用 root 用户登录存在较高风险,建议禁止。
- 编辑 SSH 配置文件:
bash
sudo nano /etc/ssh/sshd_config - 找到并修改以下配置:
ini
PermitRootLogin no - 重启 SSH 服务:
bash
sudo systemctl restart sshd
2.5 启用防火墙并限制 SSH 访问
-
使用 UFW 配置防火墙:
- 开放新的 SSH 端口(如 2222):
bash
sudo ufw allow 2222/tcp sudo ufw enable
- 开放新的 SSH 端口(如 2222):
-
仅允许特定 IP 地址访问:
bashsudo ufw allow from <trusted_ip> to any port 2222
2.6 启用 Fail2Ban 防护
Fail2Ban 是一个防止暴力破解的工具,可自动封禁多次失败的登录尝试。
- 安装 Fail2Ban:
bash
sudo apt install fail2ban - 配置 SSH 保护规则:
- 编辑
/etc/fail2ban/jail.local:ini[sshd] enabled = true port = 2222 maxretry = 5 bantime = 3600
- 编辑
- 重启 Fail2Ban 服务:
bash
sudo systemctl restart fail2ban
2.7 使用 SSH 配置文件简化登录
在客户端上配置 SSH 登录参数,避免重复输入。
- 编辑本地 SSH 配置文件:
bash
nano ~/.ssh/config - 添加以下内容:
ini
Host myserver HostName server_ip User username Port 2222 IdentityFile ~/.ssh/id_rsa - 使用别名登录:
bash
ssh myserver
3. 密钥管理与安全审计
3.1 私钥的安全存储
- 私钥应存储在本地,严禁将私钥上传到服务器。
- 使用密码短语加密私钥,防止私钥泄露后被滥用。
3.2 定期更换 SSH 密钥
- 定期删除旧的公钥,生成并上传新的密钥。
- 在服务器上清理无用的公钥:
bash
nano ~/.ssh/authorized_keys
3.3 监控 SSH 登录
-
查看最近的登录记录:
bashlast -
检查失败的登录尝试:
bashsudo grep "Failed password" /var/log/auth.log -
配置登录告警(可选):
- 在
~/.bashrc中添加:bashecho "SSH login: $(date) from $(who | awk '{print $5}')" | mail -s "SSH Login Alert" your_email@example.com
- 在
4. 总结
配置 SSH Key 和安全加固的步骤可以分为以下几部分:
- 实现无密码登录:
- 生成公私钥对并上传公钥至服务器。
- 测试无密码登录是否成功。
- SSH 安全加固:
- 禁用密码登录。
- 更改默认端口。
- 限制登录用户,禁止 root 登录。
- 启用防火墙和 Fail2Ban 防护。
- 密钥管理与审计:
- 确保私钥安全,定期更换密钥。
- 监控登录行为,发现异常及时处理。
通过以上配置,可以显著提高服务器的安全性,防止未经授权的访问。

浙公网安备 33010602011771号