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