2014-02-19 6 views
6

So ansible-playbook hat --ask-pass und --ask-sudo-pass. Gibt es eine Möglichkeit, ssh ohne Passwort zu testen und nur dann nach einem Passwort zu fragen, wenn die passwortlose Anmeldung fehlschlägt? Ähnlich kann ssso ohne Kennwort zuerst versucht werden und dann nur gefragt werden, wenn das nicht funktioniert?kann automatisch nach Passwörtern fragen und nur wenn notwendig

FYI Ich habe eine kleine Shell-Funktion, um dies durch Versuch und Irrtum herauszufinden, aber ich hoffe, dass so etwas in ansible gebacken wird.

get_ansible_auth_args() { 
    local base_check="ansible all --one-line --inventory-file=deploy/hosts/localhost.yml --args=/bin/true --sudo" 
    ${base_check} 
    if [[ $? -eq 0 ]]; then 
    return; 
    fi 
    local args="--ask-pass" 
    ${base_check} ${args} 
    if [[ $? -eq 0 ]]; then 
    export ANSIBLE_AUTH_ARGS="${args}" 
    return; 
    fi 
    local args="--ask-pass --ask-sudo-pass" 
    ${base_check} ${args} 
    if [[ $? -eq 0 ]]; then 
    export ANSIBLE_AUTH_ARGS="${args}" 
    return; 
    fi 
} 
+0

Ich könnte mich irren, aber ich glaube ansible SSH im nicht interaktiven Modus und muss im Voraus wissen, damit es seine Verbindungsparameter einstellen kann. – Mxx

+0

Noch ab 1.6.6 glaube ich immer noch nicht, dass das ein Feature ist. Es erlaubt noch nicht einmal unterschiedliche Passwörter pro Host (auf der Eingabeaufforderung können verschiedene Passwörter in der Hosts-Datei gesetzt werden). Du könntest das wahrscheinlich ein Feature machen. – seeafish

+0

@Peter Lyons - Eine solche Funktion wäre auch für mich nützlich. Fragen Sie einfach bei ansible-Leuten nach, ob sie eine empfohlene Methode zum Anfordern einer Funktion haben, nachdem sie ihre Community-Guides gelesen haben. - https://twitter.com/smprk/status/576414667913969664 Ein Github-Problem scheint ihre Warteschlange zu überladen. –

Antwort

1

Wenn Sie ask_pass und ssh_args gesetzt, wie ich weiter unten zeigen dann ansible sollten Sie am Anfang einmal für Passwort fragen und das Passwort verwenden, wenn öffentliche Schlüssel Auth funktioniert nicht.

[defaults] 
ask_pass  = True 

[ssh_connection] 
ssh_args = -o PubkeyAuthentication=yes -o PasswordAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s 

Dies ist immer noch nicht die volle Lösung: Catch seine (AFAIK) ansible sshpass verwendet, so dass das Passwort es zu Beginn aus dem gesammelten würde das einzige Passwort, es und es, wenn Sie nicht verwenden würde funktionieren haben unterschiedliche Passwörter für verschiedene Maschinen. :-)

Nur ein anderer Hack, den ich mir vorstellen kann, ist das Ersetzen von /usr/bin/ssh (oder was auch immer die von Ihnen verwendete openssh ssh ist) mit einem eigenen Script, das die Logik des Lesens des Passworts aus einer flachen Datei bei Bedarf umschließt, I suspect ansible würde die tty verbergen, damit Ihr Skript das Passwort nicht von stdin lesen kann.

Verwandte Themen