Estou tentando gerar novamente as chaves do host ssh em um punhado de servidores remotos via ansible (e ssh-keygen
), mas os arquivos não parecem estar aparecendo. O manual funciona bem, mas os arquivos no controle remoto não são alterados.
Eu preciso recorrer ao echo -e
hackery, pois esses controles remotos estão executando o Ubuntu 14.04 e não têm a versão correta do python-pexpect
disponível (de acordo com a ansible).
o que estou perdendo? Meu manual e saída estão abaixo:
livro de cantadas
---
- hosts: all
become: true
gather_facts: false
tasks:
- name: Generate /etc/ssh/ RSA host key
command : echo -e 'y\n'|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ DSA host key
command : echo -e 'y\n'|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ ECDSA host key
command : echo -e 'y\n'|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
resultado
$ ansible-playbook ./playbooks/ssh-hostkeys.yml -l myhost.mydom.com,
SUDO password:
PLAY [all] **********************************************************************************************
TASK [Generate /etc/ssh/ RSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ DSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ ECDSA host key] ****************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C -N "
]
}
PLAY RECAP **********************************************************************************************
myhost.mydom.com : ok=6 changed=3 unreachable=0 failed=0
file: state:absent ...
abordagem de canalizar coisas para o ssh-keygen. Embora provavelmente não exista muita diferença.absent
alguns dias atrás. Efetivamente, isso excluirá o arquivo antes de gerar novamente a chave. É uma abordagem muito mais clara. Obrigado.O
command
módulo ansible não passa comandos através de um shell . Isso significa que você não pode usar operadores de shell, como o tubo, e é por isso que você está vendo o símbolo do tubo na saída. No que diz respeito ao ansible, ele executou o comandoecho
com todo o restante da linha como argumento paraecho
.Se você precisar da linha de comando processada por um shell, use em
shell
vez decommand
.E deveria haver uma maneira melhor de regenerar as chaves do host ssh, mas não consigo encontrar uma agora ...
fonte
echo ...
bit não funcionou após uma segunda execução (eu estava testando em/tmp/
que as chaves não existiam na primeira vez). Recorri a remover as chaves do host primeiro, como você mencionou, e as novas geradoras. Na medida em que as chaves são regeneradas automaticamente, isso depende da sua distribuição, correto? Nem todas as distribuições Linux usam systemd.Use o módulo especial para esta tarefa:
fonte
desculpe, mas o i não poderia usar "cria" em uma tarefa. eu obtive o seguinte erro:
consequentemente, eu uso as seguintes tarefas:
fonte
@Zoredache tem a resposta correta, mas falha (observada por @MaxiReglisse) nas versões recentes do Ansible. Use o seguinte código:
fonte
Outra opção é usar o módulo do usuário . O lado positivo disso é que você terá uma tarefa idempotente. Aqui está um exemplo de como gerar chaves ssh no localhost:
fonte
Use os módulos openssh_keypair e allowed_key para criar e implantar as chaves ao mesmo tempo sem salvá-las em seu host ansível.
fonte