首页 > 解决方案 > 成功执行远程操作后连接错误

问题描述

我写了一个简单的脚本来删除用户。

---
- 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

解决方案


如上面评论中所述,问题在于我使用的是“成为”。这导致 ansible 以我的默认用户“自动化”身份登录,然后 su 登录为 root。因此,root 删除了用户——即用户“自动化”——并退出回自动化登录 shell。但那时 /home/automation 目录已经消失,并且出现错误。

使用-u root(以 root 身份登录,而不是作为自动化登录)而不是“成为”摆脱了错误。


推荐阅读