「x.x.xx への共有接続が閉じられました」という Ansible エラーを修正する方法
この短い記事では、「module_stderr」:「x.x.x.x への共有接続が閉じられました。\r\n」、「module_stdout」:「/bin/sh: /usr/」の問題を解決する方法を説明します。 Ansible コマンドの実行中に「bin/python: No such file or directory\r\n」と表示されます。
次のスクリーンショットは、Ansible モジュールのエラーを示しています。新しくデプロイされた 2 台の 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 サポート」を参照してください。