美文网首页自动化运维Linux运维
ansible异常推送missing sudo password

ansible异常推送missing sudo password

作者: 菩提老鹰 | 来源:发表于2021-11-01 17:41 被阅读0次

    欢迎关注我的个人公众号 全栈运维 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权限都没有问题

    image.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,无限期的,直到杀死或通过其它机制

    参考

    SSH Config 那些你所知道和不知道的事

    相关文章

      网友评论

        本文标题:ansible异常推送missing sudo password

        本文链接:https://www.haomeiwen.com/subject/yittzltx.html