웹사이트 검색

"x.x.xx에 대한 공유 연결이 닫혔습니다" Ansible 오류를 수정하는 방법


이 짧은 기사에서는 다음 문제를 해결하는 방법을 설명합니다. “module_stderr“: “x.x.x.x에 대한 공유 연결이 닫혔습니다.\r\n”, “module_stdout”: “/bin/sh: /usr/ bin/python: 해당 파일이나 디렉터리가 없습니다\r\n”, Ansible 명령을 실행하는 동안.

다음 스크린샷은 Ansible 모듈 오류를 보여줍니다. 새로 배포된 두 개의 CentOS 8 서버에서 명령을 실행하기 위해 Ansible 명령을 실행하는 동안 이 오류가 발생했습니다.

오류 세부정보에 따르면 원격 시스템의 셸이 다음에 표시된 대로 Python 인터프리터(/usr/bin/python)를 찾을 수 없기 때문에 연결에 실패했습니다. 줄: "module_stdout": "/bin/sh: /usr/bin/python: 해당 파일이나 디렉터리가 없습니다\r\n".

원격 호스트를 확인한 결과 시스템에 Python 2가 설치되어 있지 않은 것을 발견했습니다.

기본적으로 Python 3이 설치되어 있으며 해당 바이너리는 /usr/bin/python3입니다.

Ansible 문서에 따르면 Ansible(2.5 이상)은 Python 버전 3 이상에서만 작동합니다. 또한 Ansible은 함께 제공되는 많은 플랫폼에서 Python 3을 자동으로 감지하고 사용하도록 되어 있습니다.

그러나 실패할 경우 아래 설명된 대로 그룹 또는 호스트 수준에서 ansible_python_interpreter 인벤토리 변수를 Python 3 인터프리터 위치로 설정하여 Python 3 인터프리터를 명시적으로 구성할 수 있습니다.

명령줄에서 Python 인터프리터를 Ansible에 전달

위 오류를 일시적으로 수정하려면 -e 플래그를 사용하여 표시된 대로 Python 3 인터프리터를 Ansible에 전달할 수 있습니다.

ansible prod_servers  -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root

인벤토리에서 Ansible용 Python 인터프리터 설정

오류를 영구적으로 수정하려면 인벤토리 /etc/ansible/hosts에서 ansible_python_interpreter 인벤토리 변수를 설정하세요. 표시된 대로 v/im 또는 nano 텍스트 편집기를 사용하여 편집하기 위해 열 수 있습니다.

sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts

그룹의 각 호스트에 다음 줄을 추가합니다.

ansible_python_interpreter=/usr/bin/python3

따라서 호스트 정의는 다음과 같습니다.

[prod_servers]
192.168.10.1			ansible_python_interpreter=/usr/bin/python3
192.168.10.20			ansible_python_interpreter=/usr/bin/python3.6

또는 표시된 대로 호스트 그룹에 대해 동일한 Python 인터프리터를 설정합니다.

[prod_servers]
192.168.10.1		
192.168.10.20		

[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3

Ansible 구성에서 기본 Python 인터프리터 설정

기본 Python 인터프리터를 설정하려면 Ansible의 기본 구성 파일 /etc/ansible/ansible.cfg에서 ansible_python_interpreter 인벤토리 변수를 설정하면 됩니다.

sudo vim /etc/ansible/ansible.cfg

[defaults] 섹션 아래에 다음 줄을 추가합니다.

ansible_python_interpreter=/usr/bin/python3

파일을 저장하고 닫습니다.

이제 Ansible 명령을 다시 한 번 실행해 보십시오.

ansible prod_servers -a "systemctl status firewalld" -u root

이 주제에 대한 자세한 내용은 공식 Ansible 문서에서 Python 3 지원을 참조하세요.