关闭 ssh 密码登录
为什么要关闭?
检查是否有人在暴力破解你的小鸡
lastb -n 20
lastb: 这个命令专门用于列出所有失败的登录尝试(Bad login attempts)。它读取的是 /var/log/btmp 这个二进制文件。-n 20: 这是一个参数,限制只显示最近的 20 条 记录。如果不加这个参数,它会显示日志文件中的所有记录。
不知道你们有没有失败登录记录,即使我设了随机高位端口,竟然产生了 50MB 大小的失败登录记录文件
我比较懒,一个密码走天下
小鸡变肉鸡倒是问题不大
产生一些关联,导致其他别的账号密码被破解,就难受了
关闭 ssh 密码登录,一劳永逸(还可以方便日常不需要密码直接登录)
第一阶段:本地电脑操作(密钥生成与上传)
选项一:使用现有密钥(适合已有密钥的用户)
如果你电脑上已经有可用的SSH密钥对:
-
检查现有密钥:
# 查看是否有 id_rsa、id_ed25519 等文件 ls ~/.ssh/ -
上传现有公钥(.pub)至服务器:
# -i 参数指定公钥,如果不加,会将全部公钥上传! ssh-copy-id -p 22 -i ~/.ssh/id_ed25519.pub root@1.2.3.4
选项二:生成新密钥对
如果你的电脑上没有SSH密钥,或者想要为这个服务器生成专用密钥:
-
生成密钥对(建议使用更安全的 ed25519 算法):
ssh-keygen -t ed25519 -C "myserver-key" # 按三次回车(不设置私钥密码)或设置一个私钥短语 -
将公钥上传至服务器:
ssh-copy-id -p 22 root@1.2.3.4
第二阶段:服务器端操作(部署与加固)
登录服务器执行以下操作:
-
查看公钥是否添加:
# 确认当前已授权的公钥(确保你的密钥已在里面,否则会导致无法登录) cat ~/.ssh/authorized_keys发现可疑密钥怎么办?
如果你发现 authorized_keys 里面多了一行你不认识的公钥:
- 立即删除: 使用 vi 或 nano 编辑该文件,删掉那一行。
- 排查来源: 检查 /var/log/auth.log (Debian/Ubuntu) 或 /var/log/secure (CentOS/RHEL),搜索在该密钥添加时间点前后的登录记录。
- 修改密码: 虽然对方用的是密钥,但既然他能改你的 authorized_keys,说明他可能已经拥有了你的用户权限,建议立刻更改系统用户密码。
-
清理历史爆破日志:
ls -lah /var/log/btmp* rm /var/log/btmp* -
修改SSH配置文件:
nano /etc/ssh/sshd_config确保以下两项均设为
no以彻底禁用密码:PasswordAuthentication no KbdInteractiveAuthentication no # 旧版系统没有 KbdInteractiveAuthentication ,而是 ChallengeResponseAuthentication ChallengeResponseAuthentication no -
重启SSH服务:
systemctl restart sshd systemctl restart ssh
第三阶段:验证与测试
重要:请勿关闭当前的SSH窗口!
- 本地新开窗口测试:
# 验证是否关闭密码登录 ssh -o PubkeyAuthentication=no root@1.2.3.4 -p 22 # 预期结果:Permission denied (publickey) # 验证是否可用秘钥登录( -i 参数指定秘钥,可省略) ssh -i ~/.ssh/id_ed25519 root@1.2.3.4 -p 22 - vps 直接验证:
ssh root@127.0.0.1 -p 62222 # 预期结果:Permission denied (publickey) - vps 验证是否还有登录失败日志:
lastb -n 20
- 私钥(id_ed25519)永远留在本地电脑,不要上传
- 公钥(id_ed25519.pub)放在服务器的
authorized_keys中