diff --git a/changelogs/fragments/70122-improve-error-message-ssh-client-is-not-found.yml b/changelogs/fragments/70122-improve-error-message-ssh-client-is-not-found.yml new file mode 100644 index 00000000000..cd60ca3f93e --- /dev/null +++ b/changelogs/fragments/70122-improve-error-message-ssh-client-is-not-found.yml @@ -0,0 +1,2 @@ +bugfixes: + - SSH plugin - Improve error message when ssh client is not found on the host diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py index 222703d7009..924604421b1 100644 --- a/lib/ansible/plugins/connection/ssh.py +++ b/lib/ansible/plugins/connection/ssh.py @@ -818,12 +818,17 @@ class Connection(ConnectionBase): p = None if not p: - if PY3 and conn_password: - # pylint: disable=unexpected-keyword-arg - p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, pass_fds=self.sshpass_pipe) - else: - p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdin = p.stdin + try: + if PY3 and conn_password: + # pylint: disable=unexpected-keyword-arg + p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, pass_fds=self.sshpass_pipe) + else: + p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdin = p.stdin + except (OSError, IOError) as e: + raise AnsibleError('Unable to execute ssh command line on a controller due to: %s' % to_native(e)) # If we are using SSH password authentication, write the password into # the pipe we opened in _build_command.