You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:58:08