programing tip

사용 가능한 SSH 인증 검사를 무시하는 방법은 무엇입니까?

itbloger 2020. 6. 22. 08:05
반응형

사용 가능한 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을 실행하기 전에 jenkins 작업에 환경 변수 ANSIBLE_HOST_KEY_CHECKING = False를 추가했습니다. 예를 들면 다음과 같습니다.

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

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

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


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

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

- name: Check known_hosts for {{ inventory_hostname }}
  local_action: shell ssh-keygen -F {{ inventory_hostname }}
  register: has_entry_in_known_hosts_file
  changed_when: false
  ignore_errors: yes
- name: Ignore host key on first run
  when: has_entry_in_known_hosts_file == 1
  set_fact:
    ansible_ssh_common_args: '-o StrictHostKeyChecking=no'

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


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

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

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


나는 질문에 대한 답변이 정확하고 정확하다는 것을 알고 있지만, 각 검사를 언제 그리고 왜 추가해야하는지 명확하게 설명 할 수있는 doc을 연결하고 싶었습니다 : host-key-checking


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

export ANSIBLE_HOST_KEY_CHECKING=False

The most problems appear when you want to add new host to dynamic inventory (via add_host module) in playbook. I don't want to disable fingerprint host checking permanently so solutions like disabling it in a global config file are not ok for me. Exporting var like ANSIBLE_HOST_KEY_CHECKING before running playbook is another thing to do before running that need to be remembered.

It's better to add local config file in the same dir where playbook is. Create file named ansible.cfg and paste following text:

[defaults]
host_key_checking = False

No need to remember to add something in env vars or add to ansible-playbook options. It's easy to put this file to ansible git repo.

참고URL : https://stackoverflow.com/questions/32297456/how-to-ignore-ansible-ssh-authenticity-checking

반응형