2015-06-29 10 views
6

Ich versuche, ein Paket von einem privaten git Repo mit ansible der Pip-Modul auf diese Weise zu installieren:ansible: Installieren Sie das Paket mit pip von einem privaten git Repo

- name: Install my package 
    pip: name='git+ssh://[email protected]/mycompany/my-repo.git#egg=0.1.0' 
     virtualenv=/path/to/venv 

Aber das hängt, wenn ich für die Bereitstellung versuchen, dies mit vagrant, höchstwahrscheinlich, weil es zur Bestätigung auffordert, den Schlüssel zur Liste der bekannten Hosts hinzuzufügen. In der Tat, wenn ich dies in vagrant laufen:

pip install git+ssh://[email protected]/mycompany/my-repo.git#egg=0.1.0 

Es fordert zur Bestätigung Github zu den bekannten Hosts hinzufügen und dann funktioniert gut.

Wenn ich klonen es mit accept_hostkey=yes:

- name: Clone repo 
    git: [email protected]:mycompany/my-repo.git 
     dest=/path/to/dest 
     accept_hostkey=yes 
     recursive=no 

es funktioniert gut, weil es den Host-Schlüssel akzeptiert, die auf vagabundierende kopiert wird. Mit dem pip-Modul gibt es keine solche Möglichkeit, um diese herum? Als Alternative könnte ich einen Klon machen und dann einen python setup.py install, aber ich würde lieber in einem Schritt mit pip.

+0

Was passiert, wenn Sie 'laufen pip installieren git + ssh: // git @ github.de/mycompany/my-repo.git # ei = 0.1.0' manuell? –

+0

Es funktioniert gut, ja Entschuldigung, ich hätte diese Informationen – Tristan

+0

hinzugefügt werden Und ist es genauso gut, wenn Sie den Befehl außerhalb von Bash ausführen, d. H. Wenn Umgebungsbefehle nicht definiert sind? Versuchen Sie, HOME zu deaktivieren, und führen Sie den Pip-Befehl erneut aus. –

Antwort

0

Wenn es sich um ein Problem mit autorisierten Hostschlüsseln und nicht um einen korrekten privaten Schlüssel handelt, können Sie Folgendes tun.

Sie können Host-Schlüssel immer manuell unter "~/.ssh/authorized_keys" zulassen, bevor Sie pip ausführen.

Beispiel:

https://stackoverflow.com/a/24305223/315168

einen korrekten privaten Schlüssel müssen private Github-Repository zugreifen Sie SSH Agent-Forwarding nutzen können.

+0

Haben Sie ein Beispiel für die Verwendung der ssh-Agentenweiterleitung in diesem Kontext? – Tristan

1

Run diese Aufgabe, die hostkey auf Ihre known_hosts Datei hinzuzufügen:

- name: Whitelist github.com 
    shell: if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi 
+0

Können Sie auswählen, mit welchem ​​Schlüssel der Host von 'ssh-keycan' generiert wird? – Tristan

+0

Was meinst du mit "welcher Schlüssel"? Ein Host hat nur einen Schlüssel = seine Identität. – udondan

3

Die checkout Befehl blockiert, weil github.com nicht unter den bekannten Hosts Ihrer ansible Benutzer ist. Sie sollten den github.com SSH-Schlüssel-Fingerabdruck der /home/user/.ssh/known_hosts-Datei hinzufügen. Glücklicherweise known_hosts ist jetzt ein Modul in ansible 1,9: http://docs.ansible.com/known_hosts_module.html

- known_hosts: path=/home/user/.ssh/known_hosts name=github.com key="|1|ba0yHIHdbaD9nswn12xSOyD8DFE=|EVZBrcr46cYcmx6qFRIrzTvWUX4= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" 

Wenn Sie mit ansible < 1.9, können Sie Standard ssh-keygen Befehle zur Verfügung:

- shell: ssh-keygen -l -f /home/user/.ssh/known_hosts -F github.com 
    register: github_host_is_known 
- shell: ssh-keyscan -H github.com >> /home/user/.ssh/known_hosts 
    when: github_host_is_known|failed 
+0

Das würde funktionieren, aber ich würde lieber nicht den Schlüssel im Spielbuch – Tristan

+0

Hardcodiert haben, um den hardcoded Schlüssel im Playbook nicht zu haben. –

Verwandte Themen