pam_unix(sudo:auth):对话失败,auth 无法识别 [username] 的密码
pam_unix(sudo:auth): conversation failed, auth could not identify password for [username]
我正在使用 ansible 配置我的 Centos 7 生产集群。不幸的是,执行以下命令会导致 ansible Tiemout
和 Linux 可插入身份验证模块 (pam) error conversation failed
.
相同的 ansible 命令运行良好,针对 vagrant 盒子中疯狂的虚拟实验室执行。
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"
}
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]
我找到问题了。原来是PAM'sauth模块问题!让我描述一下我是如何找到解决方案的。
上下文:
我设置了我的机器进行调试 - 即我打开了四个终端 windows。
- 第一个终端(本地机器):在这里,我正在执行
ansible prduction_server -m yum -a 'name=vim state=installed' -b -K -u username
- 第二个终端(生产服务器):在这里,我执行了
journalctl -f
(系统范围日志)。
- 第三个终端(生产服务器):在这里,我执行了
tail -f /var/log/secure
(登录sshd)。
- 第 4 个终端(生产服务器):在这里,我正在编辑
vi /etc/pam.d/sudo
文件。
每次,我从第一个终端执行命令,我得到这个错误:
# ansible error - on local machine
Timeout (7s) waiting for privilege escalation prompt error.
# sshd error - on remote machine
pam_unix(sudo:auth): conversation failed
pam_unix(sudo:auth): [username]
我向我的同事展示了我的整个设置,他告诉我错误必须与 “PAM” 相关。坦率地说,这是我第一次听说 PAM. So, I had to read this PAM Tutorial。
我发现,该错误与位于 /etc/pam.d/sudo 模块中的 auth 接口有关。通过互联网挖掘,我偶然发现了这个带有 sufficient
控制标志的 pam_permit.so
模块,它解决了我的问题!
解决方案
基本上,我添加的是 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
结论:
我花了 4 天时间才得出这个解决方案。我偶然发现了很多对我不起作用的解决方案,从 “ansible hosts/config 文件中重复的 sudo 密码”开始,“ldap 特定配置” 从总是脾气暴躁的系统管理员那里得到建议!
注:
由于我不是 PAM 专家,我不知道此修复是否会影响系统的其他方面,因此请谨慎盲目复制粘贴此代码!但是,如果您是 PAM 专家,请与我们分享替代解决方案或意见。谢谢!
当我尝试使用 sudo service apache2 restart
重新启动 apache2 时,我遇到了同样的错误
当登录到 root 时,我能够看到真正的错误在于 apache2 的配置。结果我几个月前删除了一个网站的 SSL 证书文件,但没有在 apache2 中禁用该网站。 a2dissite
成功了。
假设 lukas 用户是本地帐户,您应该查看 pam_unix.so 模块是如何在您的系统验证 pam 文件。但是对于特定的答案,需要更多关于用户帐户和 pam 配置的信息。
虽然添加 auth 足够 pam_permit.so 足以获得访问权限。不推荐在最不安全的测试环境以外的任何地方使用它。来自 pam_permit 手册页:
pam_permit is a PAM module that always permit access. It does nothing
else.
因此添加pam_permit.so作为足够以这种方式进行身份验证将完全绕过所有用户的安全性。
自从用 pacman 将 sudo 升级到 1.9.4 版本后,我就遇到了这个错误。我没有注意到 pacman 提供了一个新的 sudoers
文件。
我只需要合并 /etc/sudoers.pacnew
。
详情请看这里:https://wiki.archlinux.org/index.php/Pacman/Pacnew_and_Pacsave
我知道这并没有回答原始问题(与 Centos 系统有关),但这是错误消息的顶部 Google 结果,所以我想我会留下我的解决方案以防万一有人在基于 Arch Linux 的操作系统中遇到这个问题。
发现自己处于同样的境地,撕裂了我的头发。在我的例子中,隐藏在 sudoers 文件的末尾,有一行:
%sudo ALL=(ALL:ALL) ALL
这会撤消之前的授权。如果您不使用 sudo 组,则可以安全地删除此行。
我正在使用 ansible 配置我的 Centos 7 生产集群。不幸的是,执行以下命令会导致 ansible Tiemout
和 Linux 可插入身份验证模块 (pam) error conversation failed
.
相同的 ansible 命令运行良好,针对 vagrant 盒子中疯狂的虚拟实验室执行。
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"
}
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]
我找到问题了。原来是PAM'sauth模块问题!让我描述一下我是如何找到解决方案的。
上下文:
我设置了我的机器进行调试 - 即我打开了四个终端 windows。
- 第一个终端(本地机器):在这里,我正在执行
ansible prduction_server -m yum -a 'name=vim state=installed' -b -K -u username
- 第二个终端(生产服务器):在这里,我执行了
journalctl -f
(系统范围日志)。 - 第三个终端(生产服务器):在这里,我执行了
tail -f /var/log/secure
(登录sshd)。 - 第 4 个终端(生产服务器):在这里,我正在编辑
vi /etc/pam.d/sudo
文件。
每次,我从第一个终端执行命令,我得到这个错误:
# ansible error - on local machine
Timeout (7s) waiting for privilege escalation prompt error.
# sshd error - on remote machine
pam_unix(sudo:auth): conversation failed
pam_unix(sudo:auth): [username]
我向我的同事展示了我的整个设置,他告诉我错误必须与 “PAM” 相关。坦率地说,这是我第一次听说 PAM. So, I had to read this PAM Tutorial。
我发现,该错误与位于 /etc/pam.d/sudo 模块中的 auth 接口有关。通过互联网挖掘,我偶然发现了这个带有 sufficient
控制标志的 pam_permit.so
模块,它解决了我的问题!
解决方案
基本上,我添加的是 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
结论:
我花了 4 天时间才得出这个解决方案。我偶然发现了很多对我不起作用的解决方案,从 “ansible hosts/config 文件中重复的 sudo 密码”开始,“ldap 特定配置” 从总是脾气暴躁的系统管理员那里得到建议!
注:
由于我不是 PAM 专家,我不知道此修复是否会影响系统的其他方面,因此请谨慎盲目复制粘贴此代码!但是,如果您是 PAM 专家,请与我们分享替代解决方案或意见。谢谢!
当我尝试使用 sudo service apache2 restart
当登录到 root 时,我能够看到真正的错误在于 apache2 的配置。结果我几个月前删除了一个网站的 SSL 证书文件,但没有在 apache2 中禁用该网站。 a2dissite
成功了。
假设 lukas 用户是本地帐户,您应该查看 pam_unix.so 模块是如何在您的系统验证 pam 文件。但是对于特定的答案,需要更多关于用户帐户和 pam 配置的信息。
虽然添加 auth 足够 pam_permit.so 足以获得访问权限。不推荐在最不安全的测试环境以外的任何地方使用它。来自 pam_permit 手册页:
pam_permit is a PAM module that always permit access. It does nothing else.
因此添加pam_permit.so作为足够以这种方式进行身份验证将完全绕过所有用户的安全性。
自从用 pacman 将 sudo 升级到 1.9.4 版本后,我就遇到了这个错误。我没有注意到 pacman 提供了一个新的 sudoers
文件。
我只需要合并 /etc/sudoers.pacnew
。
详情请看这里:https://wiki.archlinux.org/index.php/Pacman/Pacnew_and_Pacsave
我知道这并没有回答原始问题(与 Centos 系统有关),但这是错误消息的顶部 Google 结果,所以我想我会留下我的解决方案以防万一有人在基于 Arch Linux 的操作系统中遇到这个问题。
发现自己处于同样的境地,撕裂了我的头发。在我的例子中,隐藏在 sudoers 文件的末尾,有一行:
%sudo ALL=(ALL:ALL) ALL
这会撤消之前的授权。如果您不使用 sudo 组,则可以安全地删除此行。