pam_unix(sudo:auth):对话失败,auth 无法识别 [username] 的密码

Luk*_*ski 7 ssh centos pam sshd ansible

我正在使用ansible来配置我的 Centos 7 生产集群。不幸的是,执行以下命令会导致ansible Tiemout和 Linux Pluggable Authentication Modules ( pam ) error conversation failed

相同的ansible命令运行良好,针对从流浪箱中疯狂的虚拟实验室执行。

Ansible 命令

$ ansible master_server -m yum -a 'name=vim state=installed' -b -K -u lukas -vvvv
123.123.123.123 | FAILED! => {
    "msg": "Timeout (7s) waiting for privilege escalation prompt: \u001b[?1h\u001b=\r\r"
}

Run Code Online (Sandbox Code Playgroud)

SSHd 日志

# /var/log/secure
Aug 26 13:36:19 master_server sudo: pam_unix(sudo:auth): conversation failed
Aug 26 13:36:19 master_server sudo: pam_unix(sudo:auth): auth could not identify password for [lukas]
Run Code Online (Sandbox Code Playgroud)

Luk*_*ski 12

我找到了问题所在。原来是PAM的 auth模块问题!让我描述一下我是如何找到解决方案的。

语境:

我设置了我的机器进行调试 - 即我打开了四个终端窗口。

  • 第一个终端(本地机器):在这里,我正在执行ansible prduction_server -m yum -a 'name=vim state=installed' -b -K -u username
  • 第二个终端(生产服务器):在这里,我执行了journalctl -f(系统范围的日志)。
  • 第三个终端(生产服务器):在这里,我执行了tail -f /var/log/secure(sshd 的日志)。
  • 第四终端(生产服务器):在这里,我正在编辑vi /etc/pam.d/sudo文件。

每次,我从第一个终端执行命令时都会收到以下错误:

# ansible error - on local machine
Timeout (7s) waiting for privilege escalation prompt error.
Run Code Online (Sandbox Code Playgroud)
# sshd error - on remote machine
pam_unix(sudo:auth): conversation failed
pam_unix(sudo:auth):  [username]
Run Code Online (Sandbox Code Playgroud)

我向我的同事展示了我的整个设置,他告诉我错误与"PAM" 有关。坦率地说,这是我第一次听说PAM。所以,我必须阅读这个PAM 教程。我想通了,该错误与位于/etc/pam.d/sudo模块中的身份验证接口有关。通过互联网挖掘,我偶然发现了这个带有控制标志的模块,这解决了我的问题!pam_permit.sosufficient

解决方案

基本上,我添加的是auth sufficient pam_permit.so行到/etc/pam.d/sudo文件。看看下面的例子。

$ cat /etc/pam.d/sudo
#%PAM-1.0
# Fixing ssh "auth could not identify password for [username]"
auth       sufficient   pam_permit.so

# Below is original config
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so revoke
session    required     pam_limits.so
session    include      system-auth
Run Code Online (Sandbox Code Playgroud)

结论:

我花了 4 天时间才找到这个解决方案。我偶然发现了许多对我不起作用的解决方案,从“ansible 主机/配置文件中的重复 sudo 密码”“ldap 特定配置”到从总是脾气暴躁的系统管理员那里获得建议!

笔记:

因为,我不是 PAM 方面的专家,我不知道此修复是否会影响系统的其他方面,因此请小心盲目复制粘贴此代码!但是,如果您是 PAM 方面的专家,请与我们分享替代解决方案或意见。谢谢!

  • 通过这样做,您基本上可以跳过所有身份验证步骤并授予访问权限。对于生产服务器来说这不是一个安全的步骤。 (6认同)
  • 添加此后,我可以从命令行 sudo ,根本不需要密码。我遇到了与您相同的问题,但其他人应该知道这将禁用 sudo 安全性(这确实消除了错误!) (3认同)

小智 8

假设lukas用户是本地帐户,您应该查看pam_unix.so模块是如何在system-auth pam 文件中声明的。但要获得具体答案,需要有关用户帐户和 pam 配置的更多信息。


在添加auth 时,足够的 pam_permit.so足以获得访问权限。不建议在除最不安全的测试环境之外的任何环境中使用它。从 pam_permit 手册页:

   pam_permit is a PAM module that always permit access. It does nothing
   else.
Run Code Online (Sandbox Code Playgroud)

因此,以这种方式添加pam_permit.so足以进行身份​​验证将完全绕过所有用户的安全性。