SSH 安全加固:开启密钥认证并禁用密码登录

使用密钥对(Key Pair)代替传统密码登录,可以有效防御针对 SSH 端口(22)的暴力破解攻击。以下是标准的操作流程。


1. 核心原理

SSH 密钥登录采用非对称加密技术。你将 公钥 (Public Key) 存放在服务器上,将 私钥 (Private Key) 保存在本地电脑。登录时,服务器通过公钥出题,你用私钥解题,从而完成身份验证。


2. 操作步骤

第一步:生成密钥对(本地电脑执行)

如果你的电脑还没有密钥,请打开终端执行:

ssh-keygen -t ed25519 -C "[email protected]"

提示:按三次回车即可(默认路径,不设私钥密码)。推荐使用 ed25519 算法,它比 RSA 更快且更安全。

第二步:上传公钥到服务器(本地电脑执行)

使用自动化工具将公钥拷贝到服务器的 ~/.ssh/authorized_keys 文件中:

ssh-copy-id 用户名@服务器IP

第三步:修改 SSH 配置(服务器执行)

注意:请确保你现在已经能通过密钥成功登录,再执行此步!

编辑配置文件:

sudo nano /etc/ssh/sshd_config

在文件中修改或确认以下各项:

配置项 设定值 说明
PubkeyAuthentication yes 允许公钥认证
PasswordAuthentication no 禁用密码登录
ChallengeResponseAuthentication no 禁用挑战应答认证
PermitRootLogin prohibit-password 允许 root 登录但仅限密钥

第四步:重启服务使配置生效

# 检查语法是否正确
sudo sshd -t

# 重启服务
sudo systemctl restart ssh

3. 常见问题与权限修复

如果配置后无法登录,通常是服务器文件权限过大导致的(SSH 要求敏感目录必须保持私有):

  • .ssh 目录: 必须是 700 (drwx------)
  • authorized_keys 文件: 必须是 600 (-rw-------)

修复命令:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4. 安全进阶建议

  1. 更改默认端口:Port 22 改为其他不常用端口(如 22022),可以规避 90% 的自动扫描脚本。
  2. 定期备份私钥: 私钥丢失意味着你将失去访问权限,除非通过云平台的 VNC 控制台恢复。
  3. 使用 SSH Agent: 如果你的私钥设置了密码,可以使用 ssh-add 将其加入缓存,避免重复输入。

运维进阶:处理“身份验证变更”报警
当你重装了系统,或者服务器更换了 IP,再次连接时,SSH 会弹出一大串红色的警告:IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!。

这是因为你的本地电脑 known_hosts 文件记录的是旧的服务器“指纹”,由于系统重装,指纹对不上了。

快速修复命令
无需手动去编辑那个乱码一样的 known_hosts 文件,直接执行:

Bash
ssh-keygen -R 188.68.60.165
命令解析:

-R (Remove):从本地缓存中删除指定 IP 或域名的公钥记录。

执行后,下次登录时 SSH 会再次询问你是否信任该主机,输入 yes 即可重新建立信任。