TGViewer
Эксперименты сумасшедшего Эксперименты сумасшедшего @experimentsmoby · 912 subscribers
Post #98 2.18K
Ненавижу, но люблю 🤯

В чем история, познакомился я тут как-то с модулем win_package, чтобы удалить виндовый пакетик по его GUID... и лучше бы я этого не делал.

Все делал довольно базово, коннект у меня шел по winrm к доменному хосту по порту 5985:
ansible_connection: winrm
ansible_winrm_transport: ntlm

Казалось бы что тут может пойти не так, а вот что:
[WARNING]: Failed to cleanup running WinRM command, resources might still be in use on the target server
...'Connection aborted.', error(104, 'Connection reset by peer')

Хм... окей, пошли смотреть в winrm.py, что это за warning интересный... обнаруживается вот это:
        except requests.exceptions.Timeout as exc:
raise AnsibleConnectionFailure('winrm connection error: %s' % to_native(exc))
finally:
if command_id:
# Due to a bug in how pywinrm works with message encryption we
# ignore a 400 error which can occur when a task timeout is
# set and the code tries to clean up the command. This happens
# as the cleanup msg is sent over a new socket but still uses
# the already encrypted payload bound to the other socket
# causing the server to reply with 400 Bad Request.
try:
self.protocol.cleanup_command(self.shell_id, command_id)
except WinRMTransportError as e:
if e.code != 400:
raise

display.warning("Failed to cleanup running WinRM command, resources might still be in use on the target server")


Ладно подумал я... возможно проблема в транспорте и типе подключения, давай поменяет на CredSSP
ansible_connection: psrp
ansible_winrm_transport: credssp

И тут такая же история... но уже с другой ошибкой, которая так же тянется из winrm.py:
  msg: 'Unexpected failure during module execution: Received a WSManFault message. (Code: 995, Machine: xxxxx, Reason: The I/O operation has been aborted because of either a thread exit or an application request.)'
stdout: ''

Думаю надо еще потыкаться и попробовать удалить пакетик не через модуль win_package, а напрямую через shell модуль, спойлер, наткнулся я на такие же ошибки, но обнаружил любопытный моментик:
[WARNING]: Failure cleaning temp path 'C:\Users\Administrator\AppData\Local\Temp\ansible-moduletmp-XXXXXXXXXXXXXXXXXXXXX': Win32Exception NtSetInformationFile() failed 0x00000001: Incorrect function
changed: [XXXXXXXXXX] => changed=true
...
...
rc: 0
reboot_required: false

То есть когда модуль не может очистить временный файлик, тогда удаление пакета проходит успешно.
Океееей... я пошел гуглить и разбираться почему такое происходит и оказалось, что после исполнения удаления пакетика с помощью транспорта winrm он уходит в ребут и рвет соединение 🙃

ВСЕ, с этим ничего не сделаешь, так работает winrm

Какие остались варианты...
1) Обработка ошибки - обрабатывать конкретную ошибку не стал... ибо увидел, что у неё есть определенная вариативность и страшно представить, сколько я еще потенциальных проблем из-за транспорта мог не поймать
2) ignore_errors: true - ну это совсем плохой вариант
3) block / rescue - а вот это то что нужно, по сути после ошибки мы производим повторное выполнение таски и восстанавливаем winrm подключение

Вот такие пироги...
  • 🤯 10
  • 😱 7
  • 👍 3
  • 😁 2
  • 🔥 1
More from @experimentsmoby
  1. Sep 12, 2026Post #122
  2. Sep 5, 2026🔐 CTF Meetup 2026 — Погружение в боевой кибербез Готов прокачать скиллы в практической бе…
  3. Sep 5, 2026Для тех кто пропустил наш митап 😁
  4. Jul 3, 202624 июля в 15:30 в Московском офисе Positive Technologies пройдет митап для начинающих спец…
  5. Jul 1, 2026Пришли ко мне с одной задачкой... ну я за неё и сел... ☕️ Обожаю Windows, обожаю ACL, обож…
  6. May 10, 2026Боже, как мне надоело, что про этот ИИ вокруг все говорят и говорят... Куда ни зайдешь - в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →