为什么要关闭?

检查是否有人在暴力破解你的小鸡

lastb -n 20
  • lastb: 这个命令专门用于列出所有失败的登录尝试(Bad login attempts)。它读取的是 /var/log/btmp 这个二进制文件。
  • -n 20: 这是一个参数,限制只显示最近的 20 条 记录。如果不加这个参数,它会显示日志文件中的所有记录。

不知道你们有没有失败登录记录,即使我设了随机高位端口,竟然产生了 50MB 大小的失败登录记录文件

我比较懒,一个密码走天下

小鸡变肉鸡倒是问题不大

产生一些关联,导致其他别的账号密码被破解,就难受了

关闭 ssh 密码登录,一劳永逸(还可以方便日常不需要密码直接登录)

第一阶段:本地电脑操作(密钥生成与上传)

选项一:使用现有密钥(适合已有密钥的用户)

如果你电脑上已经有可用的SSH密钥对:

  1. 检查现有密钥

    # 查看是否有 id_rsa、id_ed25519 等文件
    ls ~/.ssh/
    
  2. 上传现有公钥(.pub)至服务器

    # -i 参数指定公钥,如果不加,会将全部公钥上传!
    ssh-copy-id -p 22 -i ~/.ssh/id_ed25519.pub root@1.2.3.4
    

选项二:生成新密钥对

如果你的电脑上没有SSH密钥,或者想要为这个服务器生成专用密钥:

  1. 生成密钥对(建议使用更安全的 ed25519 算法):

    ssh-keygen -t ed25519 -C "myserver-key"
    # 按三次回车(不设置私钥密码)或设置一个私钥短语
    
  2. 将公钥上传至服务器

    ssh-copy-id -p 22 root@1.2.3.4
    

第二阶段:服务器端操作(部署与加固)

登录服务器执行以下操作:

  1. 查看公钥是否添加:

    # 确认当前已授权的公钥(确保你的密钥已在里面,否则会导致无法登录)
    cat ~/.ssh/authorized_keys
    

    发现可疑密钥怎么办?

    如果你发现 authorized_keys 里面多了一行你不认识的公钥:

    • 立即删除: 使用 vi 或 nano 编辑该文件,删掉那一行。
    • 排查来源: 检查 /var/log/auth.log (Debian/Ubuntu) 或 /var/log/secure (CentOS/RHEL),搜索在该密钥添加时间点前后的登录记录。
    • 修改密码: 虽然对方用的是密钥,但既然他能改你的 authorized_keys,说明他可能已经拥有了你的用户权限,建议立刻更改系统用户密码。
  2. 清理历史爆破日志:

    ls -lah /var/log/btmp*
    rm /var/log/btmp*
    
  3. 修改SSH配置文件:

    nano /etc/ssh/sshd_config
    

    确保以下两项均设为 no 以彻底禁用密码:

    PasswordAuthentication no
    KbdInteractiveAuthentication no
    # 旧版系统没有 KbdInteractiveAuthentication ,而是 ChallengeResponseAuthentication
    ChallengeResponseAuthentication no
    
  4. 重启SSH服务:

    systemctl restart sshd
    systemctl restart ssh
    

第三阶段:验证与测试

重要:请勿关闭当前的SSH窗口!

  1. 本地新开窗口测试:
    # 验证是否关闭密码登录
    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
    
  2. vps 直接验证:
    ssh root@127.0.0.1 -p 62222 
    # 预期结果:Permission denied (publickey)
    
  3. vps 验证是否还有登录失败日志:
    lastb -n 20
    

  • 私钥(id_ed25519)永远留在本地电脑,不要上传
  • 公钥(id_ed25519.pub)放在服务器的 authorized_keys