[ssh] 사용 가능한 SSH 인증 검사를 무시하는 방법?

Ansible의 SSH 인증 검사를 무시하는 방법이 있습니까? 예를 들어 새 서버를 설정했을 때이 질문에 예라고 대답해야합니다.

GATHERING FACTS ***************************************************************
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?

나는 이것이 일반적으로 나쁜 생각이라는 것을 알고 있지만, 먼저 클라우드 공급자에서 새로운 가상 서버를 만든 다음 자동으로 내 플레이 가능한 플레이 북을 호출하여 구성하는 스크립트에 이것을 통합하고 있습니다. 스크립트 실행 중에 사람의 개입을 피하고 싶습니다.



답변

두 가지 옵션-첫 번째 대답은 환경 변수 ANSIBLE_HOST_KEY_CHECKING를 False로 설정하는 것 입니다.

그것을 설정하는 두 번째 방법은 파일을 ansible.cfg 파일에 저장하는 것입니다. 이것은 시스템 또는 사용자 수준에서 /etc/ansible/ansible.cfg또는 시스템 내에서 또는 ~/.ansible.cfg동일한 디렉토리의 구성 파일에서 설정할 수 있기 때문에 실제로 유용한 옵션입니다. 실행중인 플레이 북으로

이렇게하려면 ansible.cfg해당 위치 중 하나에 파일을 만들고 다음을 포함하십시오.

[defaults]
host_key_checking = False

또한 플레이 시작시 팩트를 수집할지 여부, 여러 장소에 선언 된 해시를 병합할지 또는 다른 것으로 대체할지 등과 같은 기타 편리한 기본값을 설정할 수 있습니다. 옵션의 전체 큰 목록이있다 여기 Ansible 문서에서이.


편집 : 보안에 대한 참고 사항.

SSH 호스트 키 유효성 검사는 영구 호스트에 의미있는 보안 계층입니다 . 동일한 컴퓨터에 여러 번 연결하는 경우 호스트 키를 로컬로 수락하는 것이 좋습니다.

수명이 긴 EC2 인스턴스 의 경우 인스턴스를 처음 생성 할 때 한 번만 작업을 실행하여 호스트 키를 수락하는 것이 좋습니다.

  - name: Write the new ec2 instance host key to known hosts
    connection: local
    shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"

플레이 북 실행 직후 동적으로 일어 서서 제거하는 인스턴스에는 호스트 키를 확인하기위한 보안 값이 없지만 영구 컴퓨터의 호스트 키를 확인하는 보안 값은 있습니다. 따라서 논리 환경마다 호스트 키 검사를 다르게 관리해야합니다.

  • 기본적으로 검사를 활성화 상태로 유지 ( ~/.ansible.cfg)
  • 작업 디렉토리에서 임시 인스턴스에 대해 실행하는 플레이 북에 대한 호스트 키 검사를 비활성화합니다 ( ./ansible.cfg유용한 VM에 대한 단위 테스트를위한 플레이 북과 함께, 단기 EC2 인스턴스에 대한 자동화).

답변

답을 찾았습니다 . 환경 변수 ANSIBLE_HOST_KEY_CHECKING를 로 설정해야 합니다 False. 예를 들면 다음과 같습니다.

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...


답변

앞으로 nikobelia

jenkins를 사용하여 플레이 북을 실행하는 사람들을 위해 ansible-playbook을 실행하기 전에 환경 변수 ANSIBLE_HOST_KEY_CHECKING = False를 사용하기 전에 jenkins 작업에 추가했습니다.

export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv


답변

변경 host_key_checkingfalse모든 호스트에 대한 것은 아주 나쁜 생각이다.

당신이 그것을 무시하고 싶은 유일한 시간은 “첫 접촉”에 있으며,이 두 가지 작업은 수행 할 것입니다 :

    - name: Check SSH known_hosts for {{ inventory_hostname }}
      local_action: shell ssh-keygen -F {{ inventory_hostname }}
      register: checkForKnownHostsEntry
      failed_when: false
      changed_when: false
      ignore_errors: yes
    - name: Add {{ inventory_hostname }} to SSH known hosts automatically
      when: checkForKnownHostsEntry.rc == 1
      changed_when: checkForKnownHostsEntry.rc == 1
      set_fact:
        ansible_ssh_common_args: '-o StrictHostKeyChecking=no'

따라서 known_hosts파일에 호스트 키가없는 경우 호스트 키 검사 만 해제 합니다.


답변

플레이 북을 실행하는 동안 명령 줄 인수로 전달할 수 있습니다.

ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'


답변

수정할 수없는 경우 ansible.cfg또는 playbook.yml당신은 단지 환경 변수를 설정할 수 있습니다 :

export ANSIBLE_HOST_KEY_CHECKING=False


답변

ssh 유효성 검증을 무시하려면 validate_certs라는 매개 변수를 사용하십시오.

- ec2_ami:
    instance_id: i-0661fa8b45a7531a7
    wait: yes
    name: ansible
    validate_certs: false
    tags:
      Name: ansible
      Service: TestService

이렇게하면 ssh 유효성 검사 프로세스를 무시합니다.