diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2022-01-18 20:25:40 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-18 17:25:40 -0800 |
commit | a72e3d14b376ec89ad46eb9981151ae03c1d05c6 (patch) | |
tree | 93a3226126f111c5498e5a843bd877156f3bbbcd | |
parent | 4d222aefd9f099a46610cfb32bd7b9db0d0c31f0 (diff) | |
download | ansible-a72e3d14b376ec89ad46eb9981151ae03c1d05c6.tar.gz |
ssh connection, handle 'fun' control paths (#76424) (#76694)
* handle 'fun' control paths by quoting the option when passed to ssh cli
Co-authored-by: Matt Clay <matt@mystile.com>
(cherry picked from commit aa022dba2d141cbd3b862767400ba4f714a9edd1)
-rw-r--r-- | changelogs/fragments/ssh_quote_cp.yml | 2 | ||||
-rw-r--r-- | lib/ansible/plugins/connection/ssh.py | 3 | ||||
-rwxr-xr-x | test/integration/targets/connection_ssh/runme.sh | 4 |
3 files changed, 7 insertions, 2 deletions
diff --git a/changelogs/fragments/ssh_quote_cp.yml b/changelogs/fragments/ssh_quote_cp.yml new file mode 100644 index 0000000000..eef867606e --- /dev/null +++ b/changelogs/fragments/ssh_quote_cp.yml @@ -0,0 +1,2 @@ +bugfixes: + - ssh connection - properly quote controlpersist path given by user to avoid issues with spaces and other characters diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py index 23a4ac9306..b563864d8e 100644 --- a/lib/ansible/plugins/connection/ssh.py +++ b/lib/ansible/plugins/connection/ssh.py @@ -340,7 +340,6 @@ import subprocess import time from functools import wraps -from ansible import constants as C from ansible.errors import ( AnsibleAuthenticationFailure, AnsibleConnectionFailure, @@ -740,7 +739,7 @@ class Connection(ConnectionBase): self.port, self.user ) - b_args = (b"-o", b"ControlPath=" + to_bytes(self.control_path % dict(directory=cpdir), errors='surrogate_or_strict')) + b_args = (b"-o", b'ControlPath="%s"' % to_bytes(self.control_path % dict(directory=cpdir), errors='surrogate_or_strict')) self._add_args(b_command, b_args, u"found only ControlPersist; added ControlPath") # Finally, we add any caller-supplied extras. diff --git a/test/integration/targets/connection_ssh/runme.sh b/test/integration/targets/connection_ssh/runme.sh index 7e5953edac..b94177ba2c 100755 --- a/test/integration/targets/connection_ssh/runme.sh +++ b/test/integration/targets/connection_ssh/runme.sh @@ -68,3 +68,7 @@ ANSIBLE_SSH_TRANSFER_METHOD=piped ./posix.sh "$@" # test config defaults override ansible-playbook check_ssh_defaults.yml "$@" -i test_connection.inventory + +# ensure we handle cp with spaces correctly, otherwise would fail with +# `"Failed to connect to the host via ssh: command-line line 0: keyword controlpath extra arguments at end of line"` +ANSIBLE_SSH_CONTROL_PATH='/tmp/ssh cp with spaces' ansible -m ping all -e ansible_connection=ssh -i test_connection.inventory "$@" |