最有效方式是直接在sshd_config中设置Protocol 2:先用sudo grep -i "^protocol" /etc/ssh/sshd_config检查当前配置,若非明确为protocol 2则需编辑该文件新增或修正此行,运行sudo sshd -t验证语法,再sudo systemctl reload sshd生效,并用ssh -vvv测试确认协议协商为v2。

禁用SSH协议版本1
SSH-1存在已知漏洞,比如CRC32校验绕过和中间人攻击风险,现代系统应只使用SSH-2。在/etc/ssh/sshd_config中添加或修改这一行:
Protocol 2
保存后运行sudo sshd -t验证语法,再重启服务:sudo systemctl restart sshd。测试方式是执行ssh -1 user@server,应提示“协议不匹配”或连接失败。
强制使用强密码策略(启用PAM校验)
即使保留密码登录,也不能接受弱口令。Linux通过PAM模块(如pam_pwquality)实现密码强度控制:
- 编辑/etc/security/pwquality.conf,设置最小长度: minlen = 12
- 要求至少一类字符: minclass = 1(或分别设dcredit = -1、ucredit = -1等)
- 禁止包含用户名、连续重复字符(如aaa)、常见序列(如123456):启用usercheck = 1、maxrepeat = 3、maxsequence = 4
- 开启字典检查:dictcheck = 1(需安装cracklib-dicts或对应包)
该配置对所有新设或修改的密码生效,不影响已有弱密码——需配合chage或手动重置强制更新。
关闭空密码与密码认证(推荐组合)
空密码等于敞开大门,必须禁用;而单纯依赖密码仍易受暴力破解,建议与密钥登录配合停用密码整体路径:
- 在sshd_config中设:PermitEmptyPasswords no
- 若已确认密钥登录稳定,再设:PasswordAuthentication no、ChallengeResponseAuthentication no、UsePAM no(避免PAM绕过)
- 显式开启密钥认证:PubkeyAuthentication yes
操作前务必保留一个可用会话,修改后先sshd -t再重启,并用ssh -o PubkeyAuthentication=no测试密码登录是否真正被拒。
限制登录尝试与用户范围
减少攻击面不只是防密码弱,还要控行为和身份:
- 单次连接最多允许3次认证失败:MaxAuthTries 3
- 仅允许可信用户登录:AllowUsers deploy admin(多个用户用空格分隔)
- 禁止root直接SSH登录:PermitRootLogin no,改用普通用户+sudo提权
- 缩短无操作超时:ClientAliveInterval 60(单位秒),配合ClientAliveCountMax 3自动断开闲置连接


















