EC2 호스트에 대해 ansible-playbook을 실행할 수 없습니다. 터미널을 통한 SSH는 제대로 작동합니다.

EC2 호스트에 대해 ansible-playbook을 실행할 수 없습니다. 터미널을 통한 SSH는 제대로 작동합니다.

포트 22가 열려 있는 ec2 인스턴스를 생성했고 터미널에서 프라이빗 키를 사용하여 이 인스턴스에 연결할 수 있지만 ansible-playbook을 시도하면 연결할 수 없습니다. 저는 동적 인벤토리를 사용해 왔습니다.

SSH에 사용하는 명령도 성공했습니다(개인 키가 있는 위치에서 아래 명령을 실행 중입니다).

ssh -i "test-key.pem" [email protected]

플레이북 콘텐츠:

---
- name: Hello World example
  hosts: all
  become: true

  tasks:
    - name: Printing Hello World
      debug:
          msg: "Hello World"

내가 실행한 명령은 다음과 같습니다.

ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id playbook-hello.yml

심지어 나는 다음을 시도했습니다.

ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id -e 'ansible_ssh_user=ubuntu' playbook-hello.yml

오류:

fatal: [x.x.x.x]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host x.x.x.x port 22: Operation timed out\r\n", "unreachable": true}

그 외 세부 사항:

MacBook Pro에서 ansible-playbook을 실행하고 있습니다. EC2 인스턴스는 Ubuntu OS 18.04를 실행하고 있습니다.

./ec2.py를 실행하면 내 인스턴스가 인쇄되는 것을 볼 수 있습니다. AWS 키는 홈 디렉터리 .aws/credentials 폴더에 저장됩니다.

추신: 이 질문은 사용 가능한 다른 질문과 중복될 수 있지만 내 사례와 일치하는 긍정적인 통찰력을 얻지 못했습니다.

답변1

사용된 ec2.py 스크립트가 프라이빗 IP가 있는 인스턴스만 반환한다는 점이 아쉬웠습니다. 이로 인해 포트 22의 인스턴스에 연결할 수 없었습니다.

그런데 SSH를 할 때는 Public IP나 DNS 이름을 사용하고 있었습니다.

그래서 ec2.py를 사용하는 대신 공용 IP를 사용하여 스크립트를 실행했습니다.

ansible-playbook -i a.b.c.d, playbook-hello-world.yml

abcd - 인스턴스의 공개 IP입니다.

혹시 아래 오류가 발생하는 경우:

TASK [Gathering Facts] ***************************************************************************************************************************************
fatal: [a.b.c.d]: FAILED! => {"changed": false, "module_stderr": "Shared connection to a.b.c.d closed.\r\n", "module_stdout": "/bin/sh: 1: /usr/local/bin/python3: not found\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}

아래 명령을 사용하십시오:

ansible-playbook -i a.b.c.d, -e 'ansible_python_interpreter=/usr/bin/python3' playbook-hello-world.yml

플레이북을 실행하려는 인스턴스의 언급된 경로에 pythos3가 설치되어 있는지 확인하세요.

관련 정보