CentOS-6系统OpenSSH 5.3需同时验证公钥与密码,如何改为仅密码或仅公钥登录?
CentOS-6系统OpenSSH 5.3需同时验证公钥与密码,如何改为仅密码或仅公钥登录?
看起来你的问题大概率是PAM(Pluggable Authentication Modules)配置强制要求双重验证导致的,毕竟OpenSSH 5.3本身默认不会强制同时用公钥和密码——只要你同时开启了PubkeyAuthentication和PasswordAuthentication,正常应该是先尝试公钥,失败后再 fallback 到密码,或者客户端可以选择验证方式。
下面是具体的排查和解决步骤:
1. 检查并修改PAM的sshd配置文件
OpenSSH启用UsePAM yes后,会交给PAM处理验证逻辑。你需要打开/etc/pam.d/sshd文件,查看auth段的规则:
如果看到类似这样的配置:
auth required pam_ssh.so auth required pam_unix.so
问题就出在这里——required关键字意味着每个验证模块都必须通过,所以你必须同时通过公钥(pam_ssh.so)和密码(pam_unix.so)的验证才能登录。
把它改成下面的配置:
auth sufficient pam_ssh.so auth sufficient pam_unix.so auth required pam_deny.so
sufficient表示:只要通过其中一个模块的验证,就直接通过整个验证流程,不需要再走后面的模块;- 最后一行的
pam_deny.so是兜底规则,防止前面的模块都没通过的情况(比如既没有公钥也没提供正确密码)。
2. 调整sshd_config的相关设置
确保你的/etc/ssh/sshd_config里有以下设置(如果有冲突的配置,注释掉或者修改):
PubkeyAuthentication yes PasswordAuthentication yes ChallengeResponseAuthentication no UsePAM yes
- 关闭
ChallengeResponseAuthentication是因为我们不需要挑战响应式验证,只保留密码和公钥两种方式; - 保留
UsePAM yes是因为我们要依赖PAM的灵活验证逻辑。
3. 重启sshd服务使配置生效
执行命令重启SSH daemon:
service sshd restart
额外解决客户端连接的主机密钥问题
从你的ssh -v输出看,新版本的OpenSSH客户端(比如你用的Ubuntu 22.04的OpenSSH 8.9)默认禁用了旧的ssh-rsa和ssh-dss主机密钥算法,而CentOS6的OpenSSH 5.3只支持这两种。如果要正常连接,可以在客户端命令里加参数:
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa root@cp.EXAMPLE.com
或者在客户端的~/.ssh/config里添加永久配置:
Host cp.EXAMPLE.com HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa
这样修改后,你应该就能选择用公钥或者密码任意一种方式登录了。
备注:内容来源于stack exchange,提问作者Eric Pretorious
相关产品推荐
相关产品推荐

