ssh-copy-id em uma linha com senha, possível?

2

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?

    
por shaharmor 21.08.2013 / 08:53

3 respostas

1

Sim, você pode fazer isso com um loop usando espere .

    
por 21.08.2013 / 08:59
3

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:

  1. Certifique-se de que você pode ssh no root @ host usando a senha (aceite impressão digital do host, etc.).
  2. 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
    
  3. 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.

    
por 12.09.2013 / 22:18
0

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>     

por 21.08.2013 / 09:00