SSH仅启用公钥认证、禁用密码认证的配置差异及正确方法咨询
SSH仅启用公钥认证、禁用密码认证的配置差异及正确方法咨询
嗨,这个问题问到点子上了——很多人在配置SSH禁用密码登录时,都会疑惑这几个参数的区别,我来给你逐一拆解清楚:
各配置项的作用
PasswordAuthentication no:这是最直接的设置,专门禁用传统的账号密码直接登录方式,也就是我们平时输入用户名+密码的那种常规登录流程,设为no后,这种方式就完全失效了。ChallengeResponseAuthentication no:这个参数针对的是挑战-响应式认证,比如系统弹出验证码、U2F密钥验证、或者其他需要用户交互式响应的验证方式(这类不是单纯的静态密码,但本质还是需要用户提供验证信息)。关闭它可以堵住这类非传统密码但仍属于“用户输入验证”的登录途径。UsePAM no:PAM(可插拔认证模块)是Linux系统用来处理认证的通用框架,很多系统的SSH会依赖PAM来实现部分认证逻辑。如果你的PAM配置里存在允许密码登录的规则,哪怕你已经关掉了上面两个参数,PAM可能还是会绕开限制让密码登录生效。设为no就会彻底禁用SSH对PAM的依赖,从根源上切断这种可能性,但这也可能影响一些依赖PAM的SSH附加功能(比如会话管理、sudo联动等)。
配置差异对比
- 只设置
PasswordAuthentication no:仅仅堵住了最常规的密码登录,但如果系统开启了挑战响应认证、或者PAM配置存在漏洞,用户仍有可能通过其他方式用密码类信息登录。 - 加上
ChallengeResponseAuthentication no和UsePAM no:相当于从三个层面全方位封锁了所有可能的密码类认证入口,安全性更高,但UsePAM no可能带来功能副作用,需要根据实际环境判断。
正确的配置方式
其实没有绝对的“唯一正确”,要结合你的系统环境来选:
- 基础稳妥配置(推荐大多数场景):
这个组合已经能堵住绝大多数密码登录途径,同时保留PAM的正常功能,不会影响系统其他依赖PAM的服务。PasswordAuthentication no ChallengeResponseAuthentication no - 极致安全配置(适合对安全性要求极高、且不需要PAM功能的场景):
但使用这个配置前一定要先测试:在当前SSH连接未断开的情况下,新开一个终端尝试用公钥登录,确认能正常登录后,再重启sshd服务(比如执行PasswordAuthentication no ChallengeResponseAuthentication no UsePAM nosystemctl restart sshd),避免因PAM禁用导致无法登录。
最后提醒一句:修改配置后,绝对不要直接断开当前SSH会话,一定要先验证新配置的有效性,确保公钥登录正常后再操作,不然可能会把自己锁在系统外哦!
备注:内容来源于stack exchange,提问作者lonix




