Есть условный свежеустановленный сервер с убунту 20.04 на борту. Там 2 сетевых интерфейса (на одном белый ip, на другом серый). Есть ssh доступ по белому ip по логину (root) + паролю. Серый ip не известен. Написать сценарий автоматизации, который сделает следующее: Добавит несколько (больше 2х) пользователей на сервер с их ключами Даст всем новым пользователям возможность повышения прав до root Добавит несколько стандартных пакетов в систему (vim, iotop, tcpdump) Отключит в ssh доступ по паролю (оставит доступ только по ключам) Сменит стандартный порт ssh Установит redis и запустит его на сером интерфейсе Настроит доступ на сервер и в редис только по серой сети Запретит любой доступ на сервер по белой сети, кроме ответов на ping
- При помощи
Vagrantустанавливал 2 виртуалки Ubuntu 20.04, 1 - Master-ansible, 2 - Для тестов.Vagrantfile- в репе есть. На виртуалке при старте 3 сетевухи, первуюnatнадо отключить + серая сеть через сетевуху на ПК + белая сеть через bridge intnet. - На Master-ansible установить необходимые пакеты
sudo apt install python3-pip -y
pip3 install ansibleПерезапускаем сессию source ~/.bashrc
- Получить репозиторий
git clone https://github.com/fil106/ansible-dev.git ansibleДля запуска сценария необходимо
vars/переменные проверить/изменить, при необходимости добавляем сюда свои переменные. После вtemplatesиспользуемplaybook.ymlраскомментировать необходимыеrolesinv.txtдобавить свои хостыansible.cfgизменить пользовтеля (в данном случае пользователь vagrant т.к. виртуалки поднимаем через vagrant).vaultpassсоздать свой, внутри plaintext парольdev_users.secretсоздать на основе примераdev_users.secret.example, где
- ssh-key - генерим ssh-key под нужным пользователем или под своим но копируем в /home/<имя пользователя>/.ssh. Генерируем при помощи
ssh-keygen. И вставляем необходимый ключ в данное поле. - password - генерим пароль
mkpasswd --method=SHA-512, чтоб не светить пароль. Можно и без шифрования. - Остальные параметры можно смотреть тут - https://github.com/ryandaniels/ansible-role-create-users
- Можно добавлять несколько пользователей, для этого просто по правилам yaml добавляем ещё один элемент через "-" соблюдая отступы.
В корневой папке запускаем:
- Если не хотим светить пароли и создавать файл
.vaultpassи создавать переменнуюansible_sudo_passвansible.cfgто:ansible-playbook playbook.yml -kK, где
-k, --ask-pass - ask for connection password
-K, --ask-become-pass - ask for privilege escalation password
- Если создали
.vaultpassи переменнуюansible_sudo_pass, то:ansible-playbook playbook.yml
create-user:Создаём пользователей из файлаvars/dev_users.secretон зашифрован, чтобы правитьansible-vault edit vars/dev_users.secretлибо вводите пароль по требованию либо.vaulpassс паролем. Использовал готовую роль отhttps://github.com/ryandaniels/ansible-role-create-userssshd-config:SSH логинимся только по ключу. Рольsshd-config- при помощи jinja2 генерим стандартный шаблон, куда подставляем 2 переменные, копируем на сервер и делаем бэкап на всякий. Ребутим.install-packages:Устанавливаем vim, iotop, tcpdump при помощи модуля aptcheck-ip:https://github.com/ATolkachev/ansible/blob/master/library/get_ip_facts.py- получаем какой интерфей с белой и серой ip. Без данной роли не будут изменены конфиги ssh, redis и iptables - конфиги будут по умолчанию. (Отказался от данного варианта в пользу пункта ниже)
check-ip:- решил определять серую сеть след. образом, известно, что коннектимся по белой ip соответственноansible_all_ipv4_addresses- знает все ip интерфейсов, иansible_host- текущий host ip. Соответственно исключаем из ansible_all_ipv4_addresses ansible_host и получаем серую ip. Логика работает соответственно только если 2 интерфейса на машине.
docker-install:Ставим dockerdocker-redis:Запускаем контейнер с redis и нужными параметрамиredis:Запускаем redis в докереiptables:Настраиваем firewall, ВАЖНО, для корректной работы необходимо запускать с включенной рольюcheck-ipт.к.private_ipполучаем оттуда