2016-07-27 20 views
1

Ich habe Textbuch, dass die Bestimmungen Benutzer Remote-Host:Benutzer mit ansible Bereitstellung dauert zu lange

--- 
- hosts: webserver 
    remote_user: myuser 
    sudo: yes 
    tasks: 
    - name: Add ssh Users 
     authorized_key: user='ubuntu' key="{{ lookup('file', './keys/{{item}}.pub') }}" 
     with_items: 
     - user1 
     - user2 
     - user3 
     - user4 
     - user5 
     - user6 
     - user7 
     - user8 
     - user9 
     - user10 
     - user11 
     - user12 

Diese einzige Aufgabe dauert 110 Sekunden und das ist sehr langsam.

$ ansible-playbook -i ./inventory setup_ssh.yaml -vvv 
Using /vagrant/ansible.cfg as config file 
1 plays in setup_ssh.yaml 

... 

PLAY RECAP ********************************************************************* 
XXX.XXX.XXX.XXX    : ok=2 changed=0 unreachable=0 failed=0 

Wednesday 27 July 2016 07:38:39 +0000 (0:01:50.486)  0:02:00.054 ******** 
=============================================================================== 
TASK: ssh_keys : Add ssh Users ---------------------------------------- 110.49s 
TASK: setup ------------------------------------------------------------- 9.49s 

Auschecken full log.

Ich habe versucht, Pipelining zu aktivieren, aber es hat nicht geholfen.

I ansible 2.0.0.2 Hier bin mit meinem ansible.cfg:

[defaults] 
hostfile = inventory 
host_key_checking = false 
roles_path = ./roles 
private_key_file = ~/.ssh/id_rsa 
deprecation_warnings=False 
remote_user = ubuntu 
callback_whitelist = profile_tasks 
pipelining = true 

[ssh_connection] 
ssh_args=-o ForwardAgent=yes 

Antwort

5

Durch die Angabe:

ssh_args=-o ForwardAgent=yes 

Sie ansible Standardwerte ersetzt haben:

ssh_args = -o ControlMaster=auto -o ControlPersist=60s 

deaktiviert somit ssh Verbindung wiederverwenden. Fügen Sie diese Optionen zu Ihrer Konfiguration hinzu und versuchen Sie es erneut.

Wenn Zeitgewinn nicht genug ist, möchten Sie möglicherweise alle .pub-Dateien zuerst lokal verketten und dann authorized_key-Modul einmal mit mehrzeiligen Zeichenfolge als Schlüsselparameter ausführen - dieses Modul kann damit umgehen.

+0

ich Ihren Vorschlag verwendet, jetzt ssh-Konfiguration wie das aussieht: '' 'ssh_args = -o Forward = yes -o Control = auto -o ControlPersist = 60s''' auf Ihren zweiten Vorschlag Accroding, Ich kann keine einzelne Datei verwenden, da ich mehr als eine Umgebung mit verschiedenen Benutzergruppen verwende. –

0

authorized_key Aufgabe von der ursprünglichen Frage wurde für jeden Benutzer und jedes Mal ausgeführt, das an den Server wieder angeschlossen wurde. In diesem Fall dauerte jede Verbindung etwa 7 Sekunden. Zuerst habe ich versucht answer from Konstantin und diese Zeit auf 48 Sekunden zu verringern. Ich war neugierig, ob das Ergebnis verbessert werden könnte. ich erfolgreich gelöst mein Problem durch Vorlage, die alle SSH-Schlüssel generiert:

--- 
- hosts: webserver 
    remote_user: myuser 
    sudo: yes 
    vars: 
    ssh_users: ['user1','user2','user3','user4','user5','user6','user7','user8','user9','user10','user11','user12'] 
    tasks: 
    - name: Add ssh Users 
    template: 
     dest=/home/myuser/.ssh/authorized_keys 
     src=templates/authorized_keys 
     owner=myuser 
     group=myuser 
     mode=600 

Und Template-Datei wie folgt aussieht:

{% for user in ssh_users %} 
{{ lookup('file', './keys/'+user+'.pub') }} 
{% endfor %} 

Hier ist meine letzte ansible Konfiguration ist:

[defaults] 
hostfile = inventory 
host_key_checking = false 
roles_path = ./roles 
private_key_file = ~/.ssh/id_rsa 
deprecation_warnings=False 
remote_user = ubuntu 
callback_whitelist = profile_tasks 
pipelining = true 

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

Jetzt es sieht viel schneller aus.

$ ansible-playbook -i ./inventory setup_ssh.yaml -vv 
Using /vagrant/ansible.cfg as config file 
1 plays in setup_backend_test.yaml 

PLAY [Configure common packages] *********************************************** 

TASK [setup] ******************************************************************* 
Wednesday 27 July 2016 14:23:48 +0000 (0:00:00.063)  0:00:00.063 ******** 
ok: [XXX.XXX.XXX.XXX] 

TASK [ssh_keys : Add ssh Users] ************************************************ 
Wednesday 27 July 2016 14:23:54 +0000 (0:00:06.025)  0:00:06.088 ******** 
changed: [XXX.XXX.XXX.XXX] => {"changed": true, "checksum": "3df874356f41d3dc5592441a86060d2796b4a714", "dest": "/home/myuser/.ssh/authorized_keys", "gid": 1000, "group": "myuser", "md5sum": "4c7d6c58a618a9fbd5e5ed3b29a3e7d3", "mode": "0600", "owner": "myuser", "size": 5357, "src": "/home/myuser/.ansible/tmp/ansible-tmp-1469629434.59-30865046320342/source", "state": "file", "uid": 1000} 

PLAY RECAP ********************************************************************* 
XXX.XXX.XXX.XXX    : ok=2 changed=1 unreachable=0 failed=0 

Wednesday 27 July 2016 14:24:02 +0000 (0:00:07.855)  0:00:13.944 ******** 
=============================================================================== 
TASK: ssh_keys : Add ssh Users ------------------------------------------ 7.85s 
TASK: setup ------------------------------------------------------------- 6.03s 
+0

Vorlage ist ein bisschen anders - es kann Schlüssel überschrieben werden, die authorized_keys auf andere Weise hinzugefügt werden. Aber wie auch immer - es ist ein anderer Weg, um with_items loszuwerden, was die Dinge wesentlich schneller macht. –