Назад | Перейти на главную страницу

ssh-copy-id в одной строке с паролем, возможно?

Я пытаюсь настроить автоматический скрипт в 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 и вы будете вынуждены изменить его при первом входе в систему.

После установки и первого входа в систему:

  1. Убедитесь, что вы можете подключиться по ssh к корневому @ хосту с помощью пароля (принять отпечаток хоста и т. Д.).
  2. Создайте 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
    
  3. Запустите Ansible с помощью: ansible-playbook -k -l host init.yml. Ansible запросит пароль root, создайте систему admins группа с доступом к sudo, создайте учетную запись пользователя на основе вашего текущего пользователя, скопируйте свой ~/.ssh/id_rsa.pub в свою новую учетную запись и добавьте ее в admins группа.

Теперь вы можете использовать Ansible через свою учетную запись пользователя с помощью sudo.

Да, вы можете сделать это с помощью петля с помощью ожидать.

Вы можете попробовать грязный взлом с expect, но это все: грязный взлом.

Правильный способ иметь открытый ключ на только что подготовленном хосте - добавить этот шаг к самому предоставлению, то есть включить его в свой pressed, kickstart или настраиваемый метод, который вы используете для подготовки своих хостов.