ansible异常推送missing sudo password
欢迎关注我的个人公众号 全栈运维
DailyJobOps
背景
已经通过管理账号配置好了ansible管理机到被管理机器的ssh免密登录,且sudo免密码
,但是ansible推送时依然报错 "msg": "Missing sudo password"
错误信息如下
Escalation requires password
devops-baseimage-02-vpc | FAILED! => {
"msg": "Missing sudo password"
}
排查过程
1、因为是使用另外一个SA账号A 管理另外一个SA账号B的sa权限(ssh免密登录,且sudo免密)推送,所以确定不是ansible本身的问题
2、单独测试SA账号B的ssh权限和sudo权限都没有问题
![](https://img.haomeiwen.com/i1394001/4b4991e44e0cf8da.png)
3、有个特殊的情况是,该SA账号B,之前使用Jumpserver的系统账号中的动态用户名
功能,该功能会根据登录用户在Linux主机上面动态创建Jumpserver系统的登录用户同名账号,该SA账号B,就是这种情况,但是在有问题的目标主机删除用户B之后, 用 SA账号A 推送 SA账号B也是成功没有问题的。但是依然报错
4、采用debug排查ansible推送过程
ansible devops-baseimage-02-vpc -m ping -vvvv
发现如下信息:
... ...
<devops-baseimage-02-vpc> ESTABLISH SSH CONNECTION FOR USER: None
<devops-baseimage-02-vpc> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=5d -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=30 -o ControlPath=/home/liuchao/.ansible/cp/b1ea8649fc -tt devops-baseimage-02-vpc '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-hpnwhdajnmoqqqnewfbzhjdabvqgchqw ; /usr/bin/python /home/liuchao/.ansible/tmp/ansible-tmp-1635757129.64-233629084265576/AnsiballZ_ping.py'"'"'"'"'"'"'"'"' && sleep 0'"'"''
Escalation requires password
devops-baseimage-02-vpc | FAILED! => {
"msg": "Missing sudo password"
}
其中有个 ControlPath=/home/liuchao/.ansible/cp/b1ea8649fc
引起关注,发现这是个socket文件
[xxxx@baolei-sa-vm ~]$ ls -l /home/xxxx/.ansible/cp/b1ea8649fc
srw------- 1 xxxx xxxx 0 Nov 1 13:54 /home/xxxx/.ansible/cp/b1ea8649fc
既然是socket文件,肯定是有进程引用
[xxxx@baolei-sa-vm ~]$ ps -ef|grep b1ea8649fc
xxxx 12814 1 0 13:55 ? 00:00:00 ssh: /home/xxxx/.ansible/cp/b1ea8649fc [mux]
yyyy 28301 1 0 14:28 ? 00:00:00 ssh: /home/yyyy/.ansible/cp/b1ea8649fc [mux]
xxxx 28635 4716 0 16:59 pts/3 00:00:00 grep --color=auto b1ea8649fc
发现有两个用户共同使用这个socket文件,那么kill掉这两个进程然后测试,推送成功
[xxxx@baolei-sa-vm ~]$ ansible devops-baseimage-02-vpc -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
devops-baseimage-02-vpc | SUCCESS => {
"changed": false,
"ping": "pong"
}
扩展
- ControlMaster
是否开启单一网络共享多个 session,值可以为 no(default)/yes/ask/auto。需要和 ControlPath 配合使用,当值为 yes 时,ssh 会监听该路径下的 control socket,多个 session 会去连接该 socket,它们会尽可能的复用该网络连接而不是重新建立新的。
- ControlPath
指定 control socket 的路径,主要是保证该参数的唯一性
- ControlPersist
结合 ControlMaster 使用,指定连接打开后后台保持的时间。值可以为 no/yes/整数,单位 s。如果为 no,最初的客户端关闭就关闭。如果 yes/0,无限期的,直到杀死或通过其它机制