
포트 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가 설치되어 있는지 확인하세요.