Skip to main content

Ansible Master

                                                                                                                                                                          

Предварительная настройка

Установка пакетов
sudo apt install -y ansible sshpass dpkg-dev apt-utils git
Создание структуры проекта
sudo mkdir -p /opt/ansible
sudo chown $USER: /opt/ansible
cd /opt/ansible
mkdir -p inventory/production/group_vars playbooks roles/offline_packages/{tasks,defaults} logs
git init
echo -e "logs/\n*.retry\n.vault_pass" > .gitignore

Файл ansible.cfg

cat > /opt/ansible/ansible.cfg <<'EOF'
[defaults]
inventory            = inventory/production/hosts.yml
roles_path           = roles
remote_user          = ansible
private_key_file     = ~/.ssh/ansible_ed25519
host_key_checking    = False
forks                = 20
retry_files_enabled  = False
interpreter_python   = auto_silent
log_path             = logs/ansible.log

[privilege_escalation]
become        = True
become_method = sudo

[ssh_connection]
pipelining = True
EOF

Генерация SSH-ключа

ssh-keygen -t ed25519 -f ~/.ssh/ansible_ed25519 -N "" -C "ansible-master"

Генерация inventory файла

cat > /opt/ansible/scan-inventory.sh <<'EOF'
#!/bin/bash
# Использование: ./scan-inventory.sh [подсеть] [исключения]
set -euo pipefail
NET=${1:-192.168.10.0/24}
EXCLUDE=${2:-192.168.10.1}          # сам сервер и другие адреса через запятую
OUT=/opt/ansible/inventory/production/hosts.yml
TMP=$(mktemp)

[ -f "$OUT" ] && cp "$OUT" "$OUT.bak.$(date +%F_%H%M)"

nmap -n -p 22 --open --exclude "$EXCLUDE" -oG - "$NET" \
  | awk '/22\/open/{print $2}' | sort -V > "$TMP"

{
  echo "all:"
  echo "  children:"
  echo "    astra_clients:"
  echo "      hosts:"
  while read -r ip; do
    echo "        pc-${ip//./-}: { ansible_host: $ip }"
  done < "$TMP"
} > "$OUT"

echo "Найдено хостов с SSH: $(wc -l < "$TMP") -> $OUT"
rm -f "$TMP"
EOF
chmod +x /opt/ansible/scan-inventory.sh

 

# Запуск скрипта сканирования сети
/opt/ansible/scan-inventory.sh 192.168.10.0/24 192.168.10.1