Init, SSH

Завдання

  1. Встановити Ansible на Linux машину або на VM (Debian, Ubuntu, Fedora, Arch, etc.) яка буде виступати в ролі controlnode. Запускати від окремо створеного користувача ansible, з правами sudo.
  2. Створити ssh ключі для користувача ansible
  3. Налаштувати другу VM (Debian, Ubuntu, Fedora, Arch, etc.), яка буде виступати в ролі server. Створити користувача ansible з правами sudo. Між двома машинами має бути встановлено мережеве з’єднання на рівні L2.
  4. Додати на сервер публічний ssh ключ користувача ansible з VM controlnode
  5. Виконати успішно ping сервера з машини керування за допомогою ansible

Проект

  1. Згідно завдання розгорнемо віртуальну машину debian у віртуальному середовищі VirtualBox. Для наглядного відображення виконуваних операцій зробимо це за допомогою Vagrant.
# -*- mode: ruby -*-
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.

Vagrant.configure("2") do |config|
  config.ssh.forward_agent = true
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update && apt-get install -y sudo git net-tools python3 python3-pip curl wget  \
      python3-apt python3-venv python3-wheel python3-setuptools && \
      groupadd -g 1001 ansible && \
      useradd -M -s /bin/bash -d /home/ansible -u 1001 -g 1001 ansible && \
      echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible && \
      chmod 0440 /etc/sudoers.d/ansible && \
      mkdir -p /home/ansible/.ssh && \
      chmod 700 /home/ansible/.ssh && \
      curl https://github.com/conqueror-mrpl.keys | tee -a /home/ansible/.ssh/authorized_keys && \
      chmod 600 /home/ansible/.ssh/authorized_keys && \
      chown -R ansible:ansible /home/ansible
  SHELL
  config.vm.define "controlnode" do |controlnode|
    controlnode.vm.box = "debian/bookworm64"
    controlnode.vm.hostname = "controlnode"
    controlnode.vm.network "private_network", ip: "192.168.129.29"
    controlnode.vm.network "forwarded_port", host: 443, guest: 10000, host_ip: "127.0.0.29"
    controlnode.vm.synced_folder ".", "/home/ansible/#{File.basename(Dir.getwd)}", owner: "1001", group: "1001", mount_options: ['dmode=750,fmode=640']
    controlnode.vm.synced_folder "./ansible/inventory/", "/home/ansible/#{File.basename(Dir.getwd)}/ansible/inventory", owner: "1001", group: "1001", mount_options: ['dmode=750,fmode=750']
    controlnode.vm.provision "shell", inline: <<-SHELL
    apt-get install -y ansible
    # ansible-playbook -i /home/ansible/ansible/
    SHELL
    controlnode.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 2
      vb.name = "controlnode"
    end
    # === Дозволяємо символічні посилання для VirtualBox ===
    controlnode.vm.provider "virtualbox" do |v|
      # Назва синхронізованої папки зазвичай збігається з назвою папки проекту на вашому комп'ютері
      # Vagrant автоматично замінить `.` на правильну назву.
      v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/.", "1"]
    end
  end
end