Estou tentando configurar um script automatizado no Ansible para definir um novo servidor, e estou usando ssh-copy-id
para adicionar o servidor mestre Ansible às novas chaves ssh autorizadas do novo servidor.
Eu criei um script que usa ssh-copy-id
, mas esse comando está pedindo a senha do novo servidor.
É possível dar essa senha na mesma linha de chamada para que eu possa automatizá-la em um script?
Aqui está um método que eu uso para provisionar novos hosts Debian sem chaves ssh conhecidas. O host precisa ter python
e python-apt
pacotes instalados para que este manual funcione fora da caixa. Se você quiser testá-lo em uma VM, você pode executar o instalador do Debian com o parâmetro de inicialização url=drybjed.github.io
- o instalador baixará um arquivo de pré-configuração com python
e python-apt
pacotes selecionados (entre outros). Após a instalação, a senha padrão para a conta root será debian
e você será forçado a alterá-la no primeiro login.
Após a instalação e primeiro login:
Crie 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
Execute Ansible com: ansible-playbook -k -l host init.yml
. A Ansible solicitará a senha do root, criará um grupo de admins
do sistema com acesso ao sudo, criará uma conta de usuário com base no usuário atual, copiará seu ~/.ssh/id_rsa.pub
para sua nova conta e o adicionará ao grupo admins
. / p>
A partir de agora você pode usar o Ansible através de sua conta de usuário usando o sudo.
Você pode tentar um hack sujo com expect
, mas isso é tudo: um hack sujo.
A maneira correta de ter uma chave pública em um host apenas provisionado é adicionar essa etapa à própria provisão, ou seja, incluí-la em seu método pressed
, kickstart
ou personalizado que você usa para provisionar seus hosts. / p>