2016-07-18 3 views
1

여기에 제가 작업하고있는 문제가 있습니다. 가능 - 두 노드 사이에서 ssh 키 이동

내가 다른 서버 M이 ansible 서버 이 본인은 서버가 B1, B2, B3 ... 내가 가진 ansible

에 의해 알려진 모든 호스트는이

[CTRL] 
M 

[SLAVES] 
B1 
B2 
B3 
로 파일

내 마스터 (불가능한 자체)에 ssh 키를 생성하고 다른 슬레이브 서버에 배포하여 마스터가 키를 사용하여 슬레이브에 연결할 수있게하려고합니다. 여기

내가 뭘하려 :

- hosts: CTRL 
    remote_user: root 
    vars_prompt: 
    - name: ssh_password 
    prompt : Please enter password for ssh key copy on remote nodes 
    private: yes 
    tasks: 
    - yum: name=sshpass state=present 
    sudo: yes 
    - name: generate ssh key on the controller 
    shell : ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N /dev/null 
    - name: copy ssh key to the other nodes 
    shell : sshpass -p '{{ ssh_password }}' ssh-copy-id [email protected]'{{ item }}' 
    with_items: groups['SLAVES'] 
    delegate_to: "{{ groups['CTRL'][0] }}" 

키 생성 작동하지만 내가 어떻게 작동하는지에 상관없이 내가 노예의 열쇠를 복사 문제

failed: [M -> M] => (item=B1) => {"changed": true, "cmd": "sshpass -p 'mypassword' ssh-copy-id [email protected]'B1'", "delta": "0:00:00.101102", "end": "2016-07-18 11:08:56.985623", "item": "B1", "rc": 6, "start": "2016-07-18 11:08:56.884521", "warnings": []} 
failed: [M -> M] => (item=B2) => {"changed": true, "cmd": "sshpass -p 'mypassword' ssh-copy-id [email protected]'B2'", "delta": "0:00:00.101102", "end": "2016-07-18 11:08:56.985623", "item": "B1", "rc": 6, "start": "2016-07-18 11:08:56.884521", "warnings": []} 
failed: [M -> M] => (item=B3) => {"changed": true, "cmd": "sshpass -p 'mypassword' ssh-copy-id [email protected]'B3'", "delta": "0:00:00.101102", "end": "2016-07-18 11:08:56.985623", "item": "B1", "rc": 6, "start": "2016-07-18 11:08:56.884521", "warnings": []} 

당신은 알고 계십니까 호스트가 어떻게 내 코드를 수정할 수 있습니까? 아니면 내가하고 싶은 일을하는 더 간단한 방법이 있습니까?

감사합니다. 가능한 해결책 (내 첫 번째 대답)의

--- 
- hosts: M 
    tasks: 
    - name: generate key pair 
     shell: ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N /dev/null 
     args: 
     creates: /root/.ssh/id_rsa 

    - name: test public key 
     shell: ssh-keygen -l -f /root/.ssh/id_rsa.pub 
     changed_when: false 

    - name: retrieve public key 
     shell: cat /root/.ssh/id_rsa.pub 
     register: master_public_key 
     changed_when: false 

- hosts: SLAVES 
    tasks: 
    - name: add master public key to slaves 
     authorized_key: 
     user: root 
     key: "{{ hostvars['M'].master_public_key.stdout }}" 

하나 :

답변

1

이 파일없이 더 깔끔한 해결책은 페치

--- 
- hosts: M 
    tasks: 
    - name: generate key pair 
     shell: ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N /dev/null 

    - name: fetch public key 
     fetch: 
     src: /root/.ssh/id_rsa.pub 
     dest: tmp/ 
     flat: yes 

- hosts: SLAVES 
    tasks: 
    - name: add master public key to slaves 
     authorized_key: 
     user: root 
     key: "{{ lookup('file', 'tmp/id_rsa.pub') }}" 
+0

안녕하세요, 난과 답변 같은 것을 생각하고 있었는데 파일을 가져 오지 만, 파일을 다시 배포하기 전에 파일을 가져 오는 것이 아닙니다. hostvars에 공개 키를 등록하는 예가 좀 더 자연스럽고 가볍습니다. 나는 오늘 그것을 시험 할 것이다. 감사합니다. 콘스탄틴 – Matthew