SSH远程登录CentOS 9虚拟机后sudo密码验证失败,本地及PuTTY登录可正常验证
这种情况我之前碰到过类似的,大概率是键盘布局或字符编码的输入传递问题——毕竟你本地登录、Windows用PuTTY连接都能正常sudo,只有从Rocky 9 SSH过去才出问题,说明CentOS 9的sudo配置本身没问题,问题出在Rocky到CentOS的输入链路里。
给你几个排查和解决的方向:
先排查键盘布局差异
这是最常见的原因:如果Rocky 9和CentOS 9的键盘布局不一致,输入特殊字符(比如@、#、$这类)时,实际传递到CentOS的字符会和你输入的不一样。- 在两台机器上分别执行
localectl status,查看Keymap字段的配置,比如一个是us(美式键盘),一个是gb(英式键盘),那@和"的位置就会互换,导致密码验证失败。 - 测试方法:在Rocky的SSH会话里,打开一个文本编辑器(比如
vim test.txt),输入你的sudo密码,然后和本地终端输入的密码对比,看看字符是否完全一致。
- 在两台机器上分别执行
检查终端类型的影响
SSH连接时的终端类型(TERM环境变量)可能会影响字符输入的处理逻辑。- 在Rocky的SSH会话里执行
echo $TERM,再在PuTTY的会话里执行同样命令,对比两者的终端类型(比如Rocky这边是xterm-256color,PuTTY是putty)。 - 可以尝试强制指定终端类型登录:
ssh -t <user>@<ip-address> TERM=putty,登录后再测试sudo是否正常。
- 在Rocky的SSH会话里执行
验证输入的密码是否正确传递
有时候SSH会话的回显设置异常,会让你误以为输入了正确密码,但实际传递的内容有偏差:
在Rocky的SSH会话里执行以下命令测试:read -s pass && echo $pass输入你的sudo密码后回车,看看输出的内容和你实际输入的是否一致。如果不一致,说明输入链路确实有字符转换问题。
查看sudo的日志细节
既然你能通过su root切换到root账户,可以在CentOS 9上查看sudo的认证日志,获取更具体的错误信息:
查看/var/log/secure文件(CentOS 9的sudo日志默认在这里),搜索包含sudo的条目,看看除了“incorrect password”之外,有没有PAM模块相关的错误提示,帮你定位问题。排查PAM配置的特殊限制
虽然其他连接方式正常,但可以确认下CentOS 9的sudo PAM配置有没有针对远程IP的限制:
打开/etc/pam.d/sudo文件,查看是否包含pam_access.so这类模块,如果有的话,再检查/etc/security/access.conf里有没有拒绝Rocky 9虚拟机IP的规则(这个概率比较低,但可以排除)。
总的来说,优先从键盘布局和终端类型这两个方向排查,因为只有Rocky SSH连接出现问题,其他方式都正常,基本可以锁定是输入传递过程中的字符转换问题。
备注:内容来源于stack exchange,提问作者Slartibartfast




