Próbuję ponownie wygenerować klucze hosta ssh na kilku zdalnych serwerach za pomocą ansible (i ssh-keygen
), ale wydaje się, że pliki się nie wyświetlają. Playbook działa OK, ale pliki na pilocie nie są zmieniane.
Muszę uciekać się do echo -e
hakerów, ponieważ te piloty działają pod Ubuntu 14.04 i nie mają właściwej wersji python-pexpect
dostępnej (zgodnie z ansiblem).
czego mi brakuje? Mój podręcznik i wyniki są poniżej:
poradnik
---
- 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
wynik
$ 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 ...
podejście, jak przesyłać rzeczy do ssh-keygen. Chociaż prawdopodobnie nie ma dużej różnicy.absent
Kilka dni temu nie wiedziałem o tym. Skutecznie spowoduje to usunięcie pliku przed ponownym wygenerowaniem klucza. Jest to znacznie jaśniejsze podejście. Dzięki.command
Moduł ansible nie przekazuje poleceń przez powłokę . Oznacza to, że nie można używać operatorów powłok, takich jak potok, i dlatego na wyjściu widać symbol potoku. Jeśli chodzi o ansible, wykonał polecenieecho
z całą resztą wiersza jako argumentamiecho
.Jeśli potrzebujesz linii poleceń przetwarzanej przez powłokę, użyj
shell
zamiastcommand
.I powinien istnieć lepszy sposób na zregenerowanie kluczy hosta ssh, ale nie mogę ich teraz znaleźć ...
źródło
echo ...
bit nie działa po drugim biegu (I testował w/tmp/
której klawisze nie istniał za pierwszym razem). Zdecydowałem się najpierw usunąć klucze hosta, jak wspomniałeś, i wygenerować nowe. Jeśli chodzi o automatyczne generowanie kluczy, zależy to od dystrybucji, prawda? Nie wszystkie dystrybucje Linuksa używają systemd.Użyj specjalnego modułu do tego zadania:
źródło
przepraszam, ale nie mogłem użyć „tworzy” w zadaniu. otrzymałem następujący błąd:
konsekwentnie korzystam z następujących zadań:
źródło
@Zoredache ma poprawną odpowiedź, ale kończy się niepowodzeniem (odnotowane przez @MaxiReglisse) w najnowszych wersjach Ansible. Zamiast tego użyj następującego kodu:
źródło
Inną opcją jest użycie modułu użytkownika . Pozytywną stroną tego jest to, że dostaniesz idempotentne zadanie. Oto przykład, jak wygenerować klucze ssh na localhost:
źródło
Użyj modułów openssh_keypair i autoryzowanego_klucza, aby jednocześnie tworzyć i wdrażać klucze bez zapisywania ich na swoim hoście ansible.
źródło