Meine neuen Serverinstanzen sind so konfiguriert, dass sie sich über ssh mit Passwort bei root anmelden. Ich möchte, dass mein Ansible-Playbook es so konfiguriert, dass es stattdessen Schlüssel verwendet, und die Root-Anmeldung mit Passwort beim ersten Start deaktiviert.
- Versuche dich mit dem Schlüssel einzuloggen
wenn ich mich nicht mit schlüssel einloggen kann:
- Mit Passwort einloggen
- Schlüssel zu authorized_keys hinzufügen
- Deaktivieren Sie die root-Anmeldung mit dem Passwort
- Optional können Sie die Verbindung mit der Taste wiederherstellen
andere aufgaben erledigen
Wie kann ich das erreichen?
EDIT : Um klar zu sein, ich frage nicht, wie man einen Schlüssel hinzufügt oder root deaktiviert, das ist nur für den Kontext. Ich frage, wie ich auf ein Passwort zurückgreifen soll, wenn es sich nicht mit einem Schlüssel authentifizieren kann. Mit --ask-pass
oder ansible_ssh_pass
set versucht Ansible nicht einmal, die Authentifizierung mit öffentlichen Schlüsseln zu verwenden
ssh
authentication
ansible
petr0
quelle
quelle
Antworten:
Sie können die
PreferredAuthentications
Option ausprobieren und auf einstellenpublickey,password
. In der Standardeinstellung sind diese Optionen zusammen mit anderen Optionen in dieser Reihenfolge enthalten, sodass dies vermutlich von ansible festgelegt wird. Das Hinzufügen über-o
oder den Clientssh_config
kann dies verhindern.Möglicherweise können Sie ein Wrapper-Skript verwenden. Wenn Sie zum Beispiel this in
key_or_password.sh
und a angebenpass.sh
, das das Kennwortbash key_or_password.sh root@host
angibt , wird beim Ausführen ein publickey gefolgt von einer nicht interaktiven Kennwortanmeldung ausgeführt.Das Protokoll gibt an, welche Methode erfolgreich war, z
quelle
Folgendes mache ich, wenn
ansible_user
es beim ersten Ausführen des Playbooks anders ist (zum Beispiel, wenn Sie nur einenroot
Benutzer haben und einen neuen Benutzer mit einem SSH-Schlüssel einrichten):ansible_pass
als ob Sie Kennwortanmeldungen verwenden würden (denken Sie daran, Vault zu verwenden). Dies sollte das Kennwort des Benutzers sein, den Sie für den 'ersten Lauf' des Wiedergabebuchs verwenden.ansible_user
den Benutzernamen des Benutzers ein, den Sie nach der ersten Ausführung verwenden möchten, wenn Sie Benutzer korrekt auf dem Server eingerichtet haben.ansible_user_first_run
den Benutzer fest, den Sie zum Beispiel für den 'ersten Lauf' des Playbooks verwenden möchtenroot
.ignore_errors
undchanged_when: False
ansible_user
auf den Wert vonansible_user_first_run
Hier ist der Code:
Hinweis: Es lohnt sich einzurichten,
transport = ssh
da sich paramiko in einigen Konfigurationen unerwartet nicht am Server anmelden kann (z. B. wenn der Server so eingerichtet ist, dass keine Passwörter akzeptiert werden und Sie zuerst einen Schlüssel und dann ein Passwort eingeben ... komisch!). Auch der SSH-Transport ist schneller, es lohnt sich also trotzdem.Weiterer Hinweis: Wenn Sie diese Methode verwenden, müssen Sie
gather_facts: false
in Ihrer Playbook-Definitionsdatei angeben , dass die Setup- / Faktensammlungsaufgaben nicht automatisch ausgeführt werden, bevor Sie mit dem Testen von Kennwörtern beginnen. Wenn Sie einen der wesentlichen Fakten benötigen, müssen Siesetup
Ihre Rolle explizit aufrufen, bevor Sie auf die Daten zugreifen, die normalerweise an Orten wieansible_devices
usw. verfügbar sind. Eine gute Möglichkeit besteht darin,setup
mit einerwhen
Klausel aufzurufen , die prüft, ob dies der Fall ist Die Tatsache, die Sie verwenden, ist leer oder nicht, bevor Sie es in Ihrer Rolle aufrufen.quelle
gather_facts: no
, um den Verbindungsversuch zu beenden, wenn Sie das Playbook starten :)Sie können
--ask-pass
ansible-playbook verwenden, wenn Sie es ausführen.Für andere Aufgaben, die Sie gestellt haben, ist dies auf verschiedene Weise möglich, z. B. durch Kopieren eines Moduls.
Das Deaktivieren des Root-Logins kann zB auch erfolgen. durch Vorlage
sshd_conf
oder Einfügen einer Zeile in eine Conf-Datei.quelle