2017-07-07 12 views
8

Próbuję utworzyć podręczny skrypt Ansible, który byłby uruchamiany z komputerów naszego zespołu programistów oraz z serwerów CI/CD.Odpowiedzialny za zadanie - klon prywatnego git bez przekazywania SSH

Jednym z zadań w książce jest pobranie kodu źródłowego naszego projektu z prywatnego repozytorium git. Ponieważ poradnik musi być uruchamiany z serwerów CI/CD, nie możemy korzystać z przekazywania SSH.

Co wymyśliłem, to skopiować niezbędny klucz prywatny SSH na zdalny komputer hosta, a następnie za pomocą klucza sklonować kod z prywatnego repozytorium git.

Jednak przy próbie wykonania zadania klonowania zawiesza się. Podczas próby uruchomienia polecenia ręcznie prosi o podanie hasła klucza prywatnego SSH. Klucz SSH nie używa hasła (puste).

Czy ktoś mógłby udostępnić swoje rozwiązanie tego (prawdopodobnie bardzo powszechnego) problemu?

W przypadku ktoś potrzebuje, to mój obecny PlayBook:

- name: Create SSH directory 
    file: path=/root/.ssh state=directory 

- name: Copy SHH key for Git access 
    copy: 
    content: "{{ git_ssh_key }}" 
    dest: /root/.ssh/id_rsa 
    owner: root 
    group: root 
    mode: 0600 

# Also tried this, but it also hangs 
#- name: Start SSH agent and add SSH key 
# shell: eval `ssh-agent -s` && ssh-add 

- name: Get new source from GIT 
    git: 
    key_file: /root/.ssh/id_rsa 
    repo: "[email protected]:user/repo.git" 
    dest: "{{ staging_dir }}" 
    depth: 1 
    accept_hostkey: yes 
    clone: yes 

Używam ansible 2.3.1.0, python version = 2.7.12

+0

"* Podczas próby ręcznego uruchomienia polecenia prosi o podanie hasła do klucza prywatnego SSH. *" - jak to jest problem z programowaniem? – techraf

+0

Potrzebuję sposobu, aby napisać zadanie, aby wprowadzić hasło (problem programowania) lub inne podejście, w którym nie musiałbym go wcale wprowadzać (problem operacyjny). –

+0

Użyj klucza bez hasła. – techraf

Odpowiedz

2

Oto kroki, aby to działało (testowane z ansibl 2.3.1 i Python 2.7. 10 na MacOS, Ubuntu LTS):

  1. Generowanie nowej pary kluczy SSH bez hasłem ssh-keygen -f my_ssh_key -N ''.

  2. Dodaj my_ssh_key.pub do repozytorium profilu użytkownika serwera

  3. test z poniższego poradnika:

_

--- 
- hosts: localhost 
    gather_facts: no 
    vars: 
    git_ssh_public_key: "Your public ssh key" 
    git_ssh_key: | 
       -----BEGIN RSA PRIVATE KEY----- 
       .... actual key here .... 
       -----END RSA PRIVATE KEY----- 
    tasks: 
    - name: Copy SSH public key file 
    copy: 
     content: "{{ git_ssh_public_key }}" 
     dest: /root/.ssh/id_rsa.pub 
     mode: 0644 

    - name: Copy SSH private key file 
    copy: 
     content: "{{ git_ssh_key }}" 
     #src: id_rsa 
     dest: /root/.ssh/id_rsa 
     mode: 0600 

    - name: Get new source from GIT 
    git: 
     repo: "[email protected]:user/repo.git" 
     dest: "/var/www/" 
     depth: 1 
     accept_hostkey: yes 
     clone: yes 

WAŻNE INFORMACJE BEZPIECZEŃSTWA

Jeśli chcesz korzystać z tego przykładu w realnym świecie, nie należy zapisać klucz prywatny w postaci zwykłego tekstu - użyj Ansible Vault.

Powinieneś także NOT używać root jako użytkownika ansibli. Bezpieczniej byłoby utworzyć nowego użytkownika bez uprawnień sudo.

+0

to nadal nie działa dla mnie .. podczas próby '' 'git fetch''' nadal prosi o podanie hasła' '' Wprowadź hasło dla klucza '/root/.ssh/id_rsa': '' '. Może jest jakiś parametr konfiguracyjny SSH, który pomijałby hasło pytające, kiedy jest puste? –

+0

Dlaczego 'git fetch'? Sprawdź w module ansible 'git'. I upewnij się, że dostarczony plik kluczy jest ważny dla twojego serwera repo. –

+0

W skrypcie ansible używam domyślnego polecenia, które podałeś. Ale wisi nic nie robiąc. Właśnie dlatego ręcznie podłączyłem się do maszyny docelowej i przetestowałem polecenie git, które łączyłoby się z moim prywatnym repozytorium. Nawet jeśli klucz jest generowany bez użycia hasła, wciąż prosi o jego wprowadzenie (wystarczy nacisnąć enter). –

0

Myślę, że problemem jest to, że dla zadania automatycznego, git nie używa klucza ssh. Czytałem (przez rozglądać się za parę minut), który z git 2.10, można podać ssh rzeczy do przekazania podczas wywoływania git .... więc chyba można spróbować czegoś takiego:

git -c core.sshCommand='ssh -i /path/to/private/key' fetch origin 

Or Jakiekolwiek inne polecenie chciałbyś użyć. Można również ustalić ją w konfiguracji:

git config core.sshCommand 'ssh -i /path/to/private/key' 

W każdym razie, mam nadzieję, że pomaga trochę

Specify private SSH-key to use when executing shell command with or without Ruby?

+0

Używam git v.1.7.1, więc to nie działa dla mnie. –

Powiązane problemy