You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SSH远程登录CentOS 9虚拟机后sudo密码验证失败,本地及PuTTY登录可正常验证

SSH远程登录CentOS 9虚拟机后sudo密码验证失败,本地及PuTTY登录可正常验证

这种情况我之前碰到过类似的,大概率是键盘布局或字符编码的输入传递问题——毕竟你本地登录、Windows用PuTTY连接都能正常sudo,只有从Rocky 9 SSH过去才出问题,说明CentOS 9的sudo配置本身没问题,问题出在Rocky到CentOS的输入链路里。

给你几个排查和解决的方向:

  • 先排查键盘布局差异
    这是最常见的原因:如果Rocky 9和CentOS 9的键盘布局不一致,输入特殊字符(比如@、#、$这类)时,实际传递到CentOS的字符会和你输入的不一样。

    1. 在两台机器上分别执行 localectl status,查看Keymap字段的配置,比如一个是us(美式键盘),一个是gb(英式键盘),那@和"的位置就会互换,导致密码验证失败。
    2. 测试方法:在Rocky的SSH会话里,打开一个文本编辑器(比如vim test.txt),输入你的sudo密码,然后和本地终端输入的密码对比,看看字符是否完全一致。
  • 检查终端类型的影响
    SSH连接时的终端类型(TERM环境变量)可能会影响字符输入的处理逻辑。

    1. 在Rocky的SSH会话里执行 echo $TERM,再在PuTTY的会话里执行同样命令,对比两者的终端类型(比如Rocky这边是xterm-256color,PuTTY是putty)。
    2. 可以尝试强制指定终端类型登录:ssh -t <user>@<ip-address> TERM=putty,登录后再测试sudo是否正常。
  • 验证输入的密码是否正确传递
    有时候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

火山引擎 最新活动