diff --git a/playbooks/scan_inventory.yml b/playbooks/scan_inventory.yml index c2c4a38..4a7ccc8 100644 --- a/playbooks/scan_inventory.yml +++ b/playbooks/scan_inventory.yml @@ -3,7 +3,7 @@ hosts: localhost connection: local gather_facts: no - # become: yes <--- УБРАЛИ ОТСЮДА (Глобальный sudo вызывает ошибку прав) + # become: yes <--- УБРАНО, ЭТО ВЫЗЫВАЛО ОШИБКУ vars: # --- SEMAPHORE API --- semaphore_url: "http://192.168.0.198:9999" @@ -37,11 +37,19 @@ tasks: # ---------------------------------------------------------------- - # ШАГ 1: Поиск живых хостов + # ПРЕДВАРИТЕЛЬНЫЙ ШАГ: Проверка sudo + # ---------------------------------------------------------------- + - name: Убедиться, что sudo установлен (для Alpine) + shell: "apk add --no-cache sudo || apt-get update && apt-get install -y sudo || true" + ignore_errors: yes + # Эта команда попытается поставить sudo, если вы root. Если нет - пропустит. + + # ---------------------------------------------------------------- + # ШАГ 1: Поиск живых хостов (Ping) # ---------------------------------------------------------------- - name: Ping Sweep (быстрый поиск) - command: "nmap -sn -n --min-rate 1000 -T4 -oG - {{ subnets | join(' ') }}" - become: yes # <--- ДОБАВИЛИ СЮДА (Точечно) + # ИСПОЛЬЗУЕМ sudo ПРЯМО В КОМАНДЕ + command: "sudo nmap -sn -n --min-rate 1000 -T4 -oG - {{ subnets | join(' ') }}" register: ping_scan changed_when: false @@ -55,15 +63,15 @@ when: active_ips | length == 0 # ---------------------------------------------------------------- - # ШАГ 2: Опрос через SNMP + # ШАГ 2: Опрос через SNMP + Проверка портов # ---------------------------------------------------------------- - name: SNMP Discovery + # ИСПОЛЬЗУЕМ sudo ПРЯМО В КОМАНДЕ shell: | - nmap -sU -sS -p U:161,T:22,T:445,T:8291,T:9100 \ + sudo nmap -sU -sS -p U:161,T:22,T:445,T:8291,T:9100 \ --script snmp-sysdescr \ --script-args snmpcommunity={{ snmp_community }} \ -Pn -n -T4 {{ item }} - become: yes # <--- ДОБАВИЛИ СЮДА (Точечно, т.к. UDP скан требует root) loop: "{{ active_ips }}" register: scan_results changed_when: false @@ -78,12 +86,14 @@ out: "{{ item.stdout }}" ip: "{{ item.item }}" snmp_desc: "{{ out | regex_search('sysDescr\\.0: ([^\\n]+)', '\\1') | first | default('') }}" + detected_type: >- {% if 'Windows' in snmp_desc or '445/tcp open' in out %}windows {% elif 'RouterOS' in snmp_desc or 'MikroTik' in snmp_desc or '8291/tcp open' in out %}mikrotik {% elif 'Linux' in snmp_desc or 'Ubuntu' in snmp_desc or '22/tcp open' in out %}linux {% elif 'JetDirect' in snmp_desc or 'LaserJet' in snmp_desc or 'Samsung' in snmp_desc or 'Kyocera' in snmp_desc or '9100/tcp open' in out %}printer {% else %}other{% endif %} + host_data: ip: "{{ ip }}" type: "{{ detected_type }}"