ansible - 成功执行远程操作后连接错误
问题描述
我写了一个简单的脚本来删除用户。
---
- name: play
hosts: all
tasks:
- name: delete users
user:
name: automation
state: absent
force: yes
remove: yes
它出现了一个错误: FAILED! => {"changed": false, "msg": "userdel: user automation is currently used by process 9781\nuserdel: Permission denied.\nuserdel: cannot lock /etc/passwd; try again later.\n", "name": "automation", "rc": 1}
哎呀,我的 ansible.cfg 说默认情况下作为用户自动化运行。我必须以 root 身份运行才能删除用户。添加become: yes
到脚本中。
再次运行它,然后它说FAILED! => {"msg": "Failed to connect to the host via ssh: Welcome to HAProxy server\nautomation@fresh1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)."}
!?设置了 ssh,因此用户自动化可以在没有密码的情况下 ssh 到 root。你可以看到它确实连接成功,因为它得到了“欢迎”MOTD。事实上它确实删除了用户!那么在成功完成所有这些之后,为什么会出现连接失败的错误?
然后我从脚本中删除了 become: yes 并再次运行它,所以脚本恢复到之前的状态,但现在自动化用户已经消失了。现在它说UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Welcome to HAProxy server\nautomation@fresh1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}
。我认为该错误是因为 become=no,因此默认情况下它尝试以自动化方式连接,但该用户现在已被删除。
那么第二步的连接错误,既然连接成功了,又删除了用户呢??我仔细研究了 -vvv 日志,但找不到任何有用的东西。
解决方案
如上面评论中所述,问题在于我使用的是“成为”。这导致 ansible 以我的默认用户“自动化”身份登录,然后 su 登录为 root。因此,root 删除了用户——即用户“自动化”——并退出回自动化登录 shell。但那时 /home/automation 目录已经消失,并且出现错误。
使用-u root
(以 root 身份登录,而不是作为自动化登录)而不是“成为”摆脱了错误。
推荐阅读
- javascript - 如何在 Node.js 中从 Binance Web 套接字 API 流式传输交易?
- vb.net - 如果网络连接失败,检查直到连接或直到按下取消按钮
- php - 引导数据表无法添加手风琴
- python - 在我的服务器中安装新 SSL 证书时出现问题
- javascript - JavaScript:获取平均花费的时间
- mysql - MariaDB 通过 AWS KMS 插件进行静态加密 - 密钥轮换不起作用?
- javascript - mongoshell上javascript中的for循环
- automation - 如何在 Windows 上以编程方式安装 java 和 .Net?
- java - Spring Cloud Stream with RabbitMQ binder,如何应用@Transactional?
- ios - 无论在 UICollectionView 中选择了什么 IndexPath,只有最后一个单元格会被突出显示