Я пытаюсь настроить автоматический скрипт в Ansible для установки нового сервера, и я использую ssh-copy-id
чтобы добавить главный сервер Ansible к авторизованным ssh-ключам нового сервера.
Я создал сценарий, который использует ssh-copy-id
, но эта команда запрашивает пароль нового сервера.
Можно ли указать ему этот пароль в той же строке вызова, чтобы я мог автоматизировать его в сценарии?
Вот метод, который я использую для подготовки новых хостов Debian без известных ключей ssh. Хост должен иметь python
и python-apt
пакеты, установленные для этого playbook, работают из коробки. Если вы хотите протестировать его на виртуальной машине, вы можете запустить установщик Debian с параметром загрузки url=drybjed.github.io
- установщик загрузит файл preseed с python
и python-apt
выбранные пакеты (среди прочих). После установки пароль по умолчанию для учетной записи root будет debian
и вы будете вынуждены изменить его при первом входе в систему.
После установки и первого входа в систему:
Создайте init.yml
:
hosts: all
user: root
sudo: no
tags: init
vars:
- ssh_user: $ENV(USER)
tasks:
- name: INIT | Create admin system group
group: name=admins system=yes state=present
tags: init
- name: INIT | Create admin account from current user
user: name=$ssh_user state=present shell=/bin/bash groups=admins
tags: init
- name: INIT | Make sure essential software is installed
apt: pkg=$item state=latest install_recommends=no
with_items:
- python
- python-apt
- sudo
tags: init
- name: INIT | Install ssh public key from current account
authorized_key: user=$ssh_user key="$FILE(~/.ssh/id_rsa.pub)"
tags: init
- name: INIT | Install sudoers file for admin accounts
lineinfile: "dest=/etc/sudoers.d/admins state=present create=yes regexp='^%admins' line='%admins ALL=(ALL:ALL) NOPASSWD: SETENV: ALL' owner=root group=root mode=0440"
tags: init
Запустите Ansible с помощью: ansible-playbook -k -l host init.yml
. Ansible запросит пароль root, создайте систему admins
группа с доступом к sudo, создайте учетную запись пользователя на основе вашего текущего пользователя, скопируйте свой ~/.ssh/id_rsa.pub
в свою новую учетную запись и добавьте ее в admins
группа.
Теперь вы можете использовать Ansible через свою учетную запись пользователя с помощью sudo.
Вы можете попробовать грязный взлом с expect
, но это все: грязный взлом.
Правильный способ иметь открытый ключ на только что подготовленном хосте - добавить этот шаг к самому предоставлению, то есть включить его в свой pressed
, kickstart
или настраиваемый метод, который вы используете для подготовки своих хостов.