ウェブサイト検索

「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/hostsansible_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.cfgansible_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 サポート」を参照してください。