幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

一次诡异的Ansible密码问题排查,最后真相?

  背景
  在做大批量运维的时候,DBA需要掌握和使用ansible。今天有同事使用ansible遇到了一个奇怪现象,和我交流了一下,我发现这个现象很奇怪,也很有趣,我认为是个BUG,于是排查,之后有了这篇文章。现象
  同时使用的是ansible2。7。8,我使用的是最新版python3。11ansible2。14,我们都复现了这个现象。这个问题简而言之是,使用比较特殊的密码组合作为主机密码,ansible在使用上会遇到问题,导致正确的密码而无法连接。
  以下是我的环境:
  角色
  hostname
  IP
  使用的密码
  ansibleserver
  192168199121
  192。168。199。121
  不涉及
  有问题的受控机
  19216819999
  192。168。199。99
  1fander
  没问题的受控机
  192168199131
  192。168。199。131
  Root123〔root192168199121〕catetcansiblehosts〔fandervm〕192。168。199。99ansibleuserrootansiblesshpass1fander〔root192168199121〕ansible192。168。199。99mping192。168。199。99UNREACHABLE!{changed:false,msg:Invalidincorrectpassword:Permissiondenied,pleasetryagain。,unreachable:true}同事疑问1特殊密码,ansible无法连接会报错
  同时设置了一个形如1xxxxxx的密码,使用sshroot192。168。199。99连接是完全没有问题的,但使用ansible连接则会报错,Invalidincorrectpassword:Permissiondenied,pleasetryagain。无法连接。这个密码经过我的研究,是有规律,1位到任意长度的数字‘’任意长度字符,ansible会报错。
  也就是,以下密码会报错1fander12fander
  以下密码不会报错1afander1fander同事疑问2此特殊密码,ansible无法连接会报错,但有时却能连接不报错排查过程1。ansiblevvvvv排查
  v参数可以让ansible输出debug日志,v越多越详细。当然了,可能并不需要五个v,我不知道要打多少个v时,我就把v打满。(mysqlbinlog我打3个v)
  如图红圈和横线,这两处很关键。
  红圈告诉我,我在执行ansible时,其实底层调用的是sshpass和ssh。
  横线这一处,报有个文件不存在,我对比了执行正常连接的机器(192。168。199。131),是不会报这个的,所以此处属于异常,需要排查。
  这些日志输出其实一团糟,可以粘贴到notepad,用以下方法美化输出。
  粘贴到notepad只有两行,通过替换r为换行符即可。
  首先,我先把r替换为fanderissb
  然后,再以扩展模式,替换回来
  现在就比较好阅读了,这一处就是不正常的。
  经过研究,这些debug日志其实来源于我前面红圈的命令行sshpassxxx的输出。
  查阅资料和整理,原理大概是这样的:
  正确连接是长这个样子的,命令结果是输出root,前面的0是命令?的返回码,0代表执行正常。
  而我们密码有问题的服务器返回码是5,输出是空
  sshpassd10sshvvvCoControlMasterautooControlPersist60soStrictHostKeyCheckingnooUserrootoConnectTimeout10oControlPathroot。ansiblecpe2f9f7759b192。168。199。99binshcechorootsleep0
  在这句命令中,ControlPersist60s是ssh的参数,代表建立一个长链接,保持60秒,这个长链接就是建立在ControlPathroot。ansiblecpe2f9f7759b的路径下。
  实际上,就是这个ControlPersist,可以解答同事疑问2此特殊密码,ansible无法连接会报错,但有时却能连接。
  为了方便解释,我把ansible服务器的这个ControlPersist调大到600秒。〔root192168199121〕catetcansibleansible。cfg〔defaults〕hostkeycheckingFalse〔sshconnection〕sshargsCoControlMasterautooControlPersist600
  首先,我登录远端服务器,先把密码改回常规密码。〔root19216819999〕echoRoot123passwdstdinrootChangingpasswordforuserroot。passwd:allauthenticationtokensupdatedsuccessfully。
  接着,我配置好ansible服务器的hosts文件。〔root192168199121〕catetcansiblehosts〔fandervm〕192。168。199。99ansibleuserrootansiblesshpassRoot123
  然后,开始测试。完全没有问题,能连通。〔root192168199121〕ansible192。168。199。99mping192。168。199。99SUCCESS{ansiblefacts:{discoveredinterpreterpython:usrbinpython},changed:false,ping:pong}
  执行psef能观察到,我们第一次连接完后,ssh并没有断开,有一个背景执行的长链接,他实际上是一个多路复用的socket连接,后续我们再连远端服务器时就是复用他,不需要重新验证密码。〔root192168199121〕psefgrepsshroot8601017:18?00:00:00usrsbinsshdDroot945860017:18?00:00:04sshd:rootpts0,pts1root92201022:40?00:00:00ssh:root。ansiblecpe2f9f7759b〔mux〕root92671009022:41pts000:00:00grepcolorautossh
  这个时候,我把远端的服务器密码修改为有问题的密码〔root19216819999〕echo1fanderpasswdstdinrootChangingpasswordforuserroot。passwd:allauthenticationtokensupdatedsuccessfully。
  此时,我的ansible服务器的hosts配置里仍然用的旧密码〔root192168199121〕catetcansiblehosts〔fandervm〕192。168。199。99ansibleuserrootansiblesshpassRoot123
  密码是错误的,那么我还能连吗?答案是能。这就是连接复用,不需要重新验证密码,直接复用前面的socket连接。
  所以,这时你通过ansible,密码乱输或者不输密码都能连。〔root192168199121〕catetcansiblehosts〔fandervm〕192。168。199。99ansibleuserroot我这里直接去掉了密码〔root192168199121〕date;ansible192。168。199。99mshellalsSunNov1322:49:15CST2022我复用这个链接的时间192。168。199。99CHANGEDrc0anacondaks。cfg
  那么这个长链接是创建后的600秒自动销毁吗?(提醒,前面我修改的ControlPersist600s)
  答案否。因为我在创建连接后,中途复用过这个连接通道,时间是22:49:15,所以他消失时间不是创建时间22:40:2810分钟,而是22:49:1510分钟,也就是22:59:15。〔root192168199121cp〕pwdroot。ansiblecp〔root192168199121cp〕state2f9f7759b;dateFile:‘e2f9f7759b’Size:0Blocks:0IOBlock:4096socketDevice:fd00h64768dInode:68415916Links:1Access:(0600srw)Uid:(0root)Gid:(0root)Access:2022111322:40:28。6805779860800Modify:2022111322:40:28。6155779880800Change:2022111322:40:28。6155779880800Birth:SunNov1322:59:00CST2022〔root192168199121cp〕state2f9f7759b;datestat:cannotstat‘e2f9f7759b’:NosuchfileordirectorySunNov1322:59:30CST2022超过22:59:15,socket消失了。
  那同事的疑问2,就可以解释了,有问题的密码依然不能通过ansible连接,能连接的假象是因为曾经用正确的密码建立过长链接(这个是ssh的参数功能,不是ansible),后面连接时复用了此连接,没有使用密码认证,所以也就不会报错了。待ControlPersist超时后,socket销毁,有问题的密码连接就开始报错了。
  我们继续排查同事的疑问1。
  根据我前面整理的原理,我标记1、2、3、4数字的这几步,我按这个顺序从下往上开始一一排除。
  其实,本来应该从最顶上的4开始排查的,但4需要阅读源码,所以我从简单的1开始排查。2。排查ssh
  首先,我测试标记为1的步骤,手敲这个密码,ssh是否认正常。结果是连接正常。
  3。排查sshpass
  然后,测试标记为2的步骤,测试sshpass传输密码是否正常的。结果也是连接正常。〔root19216819999〕sshpassp1fandersshCoControlMasterautooControlPersist60soStrictHostKeyCheckingnooUserrootoConnectTimeout10oControlPathroot。ansiblecpe2f9f7759b192。168。199。99binshcechorootsleep0root
  这里,我调整了原命令,因为原命令用的是sshpassd10,这个文件描述符文件我不知道如何制造,所以我改为用sshpassp来测试。我去掉了vvv,因为如果一切正常,我不需要刷屏的debug日志。4。使用paramiko连接方式辅助排查
  标记为3的步骤,我不知道如何测试,但我知道ansible除了ssh连接,还有一种叫paramiko的连接方式,他是旧版ansible的默认连接方式,他比较低效,他不使用ControlPersist,也就不会建立Controlsocket,而之前我们连接报错时,日志的关键信息就是Controlsocketroot。ansiblecpe2f9f7759bdoesnotexist
  当然了,他也不会使用sshpass和不会把密码写入那个数字为10的文件描述符。所以,如果我能在paramiko的连接方式能复现报错,那么就和标记为3的步骤无关。〔root192168199121inventory〕catetcansibleansible。cfg〔defaults〕hostkeycheckingFalsecallbackwhitelisttimertransportparamiko
  结果是,我使用paramiko的连接方式,也能复现连接报错。
  他这个python抛出异常非常好,终于让我知道为什么密码会错误了,原来传进去的密码不是1fander,而是1。也就是问题肯定不在标记为3的步骤,而是标记为4的步骤。
  根据报错,我在authhandler。py文件里打了两个print。
  我们再看看输出。
  那么,标记为1、2、3的步骤我们都排除了,问题出在标记为4的步骤,也就是现在的问题是:
  为什么ansible传入给sshpass和ssh的密码不正确,应该传入1fander,但最终传入1?5。排查ansiblek
  我们再来做个测试,不使用ansiblehosts文件传递密码,使用k参数手敲密码。发现一切正常。6。水落石出,是ansible的hosts设置问题
  那问题完全能定位出来了,这个疑似bug,不是ssh也不是sshpass的问题,而是ansible的问题。并且,我们能确定,这个和ansible读取解析etcansiblehosts文件有关。
  经过我查阅资料,ansible读取解析etcansiblehosts相关的代码在这个路径下,ini。py文件。cdusrlocalpython3libpython3。11sitepackagescdansiblecore2。14。0py3。11。eggansiblepluginsinventorylessini。py
  通过阅读注释,发现这个不是bug,而是官方知道的问题,所以属于一个坑。
  最后
  我经常阅读源码都是通过阅读注释就解决的,这很有趣,适合我这种萌新coder。现在是2022年11月13日的23:56分,由于能力和时间的关系,我就写到这里了。大家应该看懂了解决办法,请大家避免这个坑,这个坑不单止针对密码,在hosts文件的所有变量设置都应该这么做(上图横线)。有兴趣深入研究的同学可以继续看看源代码。

不管你是奔几的女人,夏天都该有一条空气裙,优雅减龄又洋气裙装可以说是女性生活中必不可少的时尚单品了,在选择裙装款式的时候,建议大家可以多去尝试半身长裙,优雅又百变。不管你是30岁、40岁还是50岁,这个夏天都应该拥有一条空气裙,尤其……国际足联两次开绿灯,让中国进军世界杯!何时效仿欧冠设保送生早在2002年,韩日世界杯的总奖金为1。58亿美元!每支球队只要出场,就可以获得80万美元的出场津贴,俄罗斯世界杯包括卡塔尔世界杯的奖金方案已经家喻户晓,而世界杯的吸金能力也无……金刚石量子计算的突破首次实现完整的通用量子门能够单独控制固态晶体(例如金刚石)中的许多自旋是开发大规模量子处理器和存储器的一种很有前景的技术。局域激光场通过自旋轨道耦合为电子自旋操纵提供了空间选择性,但很难同时实现精确和……中国软件如何破局?我们站在十字路口只有当中国的软件企业成熟了,中国的客户才会更加地成熟!2022年对于中国的软件行业来说,绝对谈不上一个好的年份:裁员不断倒闭不少骂声一片投资市场对……感冒了吃什么?9张图告诉你答案,赶快收藏感冒是日常生活当中非常常见的一种情况,感冒其实属于一种上呼吸道炎症,主要是由感冒病毒而引起的。病毒感染无处不在,如果机体受凉或过度疲劳抵抗力下降,接触到毒性比较强大的病毒……心情改变不了改变心境最近心里没来由的烦,坐下来思来想去无非是想做的事做不了,不想做的事一堆。比如,想写作,却没有整块时间静不下心。想闲下心多关照一下孩子心情却自己没有心情。想新东……努比亚Z40SPro发布努比亚Z40SPro三围:161。27mm73。95mm8。05mm重量:205g配色:夜色、幻青、灵笼限定版屏幕:6。67英寸OLED直屏居中挖孔,分……人民网评虚拟货币终究是黄粱一梦庞氏骗局近日,比特币一路暴跌,至6月19日跌破1。8万美元关口,这是2020年12月以来比特币的最低点,虚拟货币交易炒作风险再度成为舆论焦点。近年来,虚拟货币价格频频暴涨暴跌,我国金融……一味中药两面针,行气止痛,解毒消肿治牙疼胃痛烫伤跌伤很多人一听到两面针就以为是牙膏,市面上确实有这个牙膏品牌,但是我们今天不说牙膏,只讲中药。两面针之所以叫两面针,就是因为叶子的两面都有刺,一般都在南方,比如我国的台湾省,……华为亿健T7椭圆机测评当我把家改造成健身房我现在终于发现我是个运动器材重症人士了。因为YQ出门不方便;加上有时候工作忙;上班不仅要带电脑,还要带运动装备去公司,晚上还要带回家等各种原因,于是我果断把家改造成了健身房。去……夜读丨不要拿别人的尺子,丈量自己的生活。文字丨洞见安娜贝苏主播丨周周美学家朱光潜的寓所后面,有一条小河,他每晚都会去河边散步,沿着东岸去,过了桥再沿着西岸回。他说:走东岸时,我觉得西岸的景色……2022年中国风力发电装机情况及竞争格局预测分析中商情报网讯:风力发电机是将风能转换为机械功,机械功带动转子旋转,最终输出交流电的电力设备。风力发电机一般有风轮、发电机(包括装置)、调向器(尾翼)、塔架、限速安全机构和储能装……
男子邮寄万元苹果电脑未到手,却被激活,工作人员你没权利知道近日,杭州牛老板遇到一件棘手的事情,于是他找到记者,希望他们可以帮忙解决这件事情。电脑滞留据牛老板讲述,他是一名电商卖家,主要是在网上售卖苹果系列的产品,其中包括:……西甲最新积分榜巴萨4球大胜成功登顶,马竞赢球攀升联赛第4昨晚今晨,西甲联赛第5轮激战多场,巴萨客场40大胜加的斯,超越皇马登顶,莱万替补登场贡献1射2传,登贝莱和法蒂也完成破门;马竞主场41击败塞尔塔,升至积分榜第2位,德保罗传射,……童谣现身机场,穿着普通衣服,不显摆近日,童谣现身上海机场,她身穿格子衬衣,黑色九分裤,背着一个白色帆布包,一身平民装扮。一点没有明星的架子。咋一看就是以普通人。很真实,很贴近生活。近日,童谣现身上海机场,……感受科技创新魅力,共筑网络安全防线新区厂党支部党员职工打卡国为深入贯彻落实习近平总书记系列重要讲话精神和总体国家安全观,宣传普及《中华人民共和国网络安全法》,加强党员干部职工对网络安全的理解和认知,提升网络安全意识和实践防护技能,202……年龄大了要管住嘴常吃6种高蛋白低脂肪食物,愈吃愈年轻年龄大了要管住嘴:常吃6种高蛋白低脂肪食物,愈吃愈年轻岁月催人老,年龄大了,便不能再任性了近两年,父母总是会感叹时光过得太快,感叹自己老得太快了,眨眼间自己就不能像……2022年好口碑安卓旗舰盘点想换手机认准这4款,最高好评率达您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。对于业内人士可以,通过查看手机的参数,就可以大体了解手机的性能,但是对于普通用户……英国日裔歌手泽山璃奈拍摄Elle时尚杂志日裔英国歌手词曲作者RinaSawayama出演了由摄影师NathanielGoldberg为Elle美国版2022年6月7月号拍摄的社论QueenRina。AlexWh……2022阴阳师的Gouvernet如何搭配御魂Gouvern印石沮鹄鸟怎么配护魂和总攻?只有80的攻击力受损,但是无视20防御的特性让她的伤害并没有减少多少。对高防御神造成的伤害可以提高。2022阴阳师的Gouvernet如何搭配……传统黑白灰西装太板正,欧洲王室女性纷纷穿起彩色西装,好明媚西服套装是许多欧洲王室女性公务活动的必备服饰。传统的黑白灰西装过于板正、不够时尚吸睛,已经不再是她们的首选了。最近,她们纷纷穿起彩色西装。以下这5位欧洲王室女性在出席公务……豆腐配什么菜最好吃?教你5种不同做法,鲜香滑嫩,连汤汁都不剩豆腐是一种历史悠久,营养丰富的食材,历来素有植物肉的称号,人们对它的评价极高,丰富的蛋白质,以及微量元素,消化吸收率在95左右,很适合老年人和孩子,属于健康食品,平常可以多吃一……西门子医疗传来新消息,中国区地位将再次提升第五届中国国际进口博览会倒计时30天之际,西门子医疗传来消息,将高速增长的亚太区一分为二,即分为中国区和除中国以外的亚太区两部分。西门子医疗亚太区总裁陶琳表示,本次拆分后中国区……俄乌战争爆发以来,欧洲唯一赚大钱的国家连接欧俄的油气管道被炸,等于把双方妥协的最后一点机会也给炸了。即便欧洲向俄罗斯屈服,也不会收到天然气,那还不如将制裁进行到底;而俄罗斯失去天然气这个筹码,未来也只能一路打……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网