From 49f8edd035cd28dd1cf8945f44ec3d55212910bd Mon Sep 17 00:00:00 2001 From: Abhijit Menon-Sen Date: Mon, 10 Aug 2015 20:48:50 +0530 Subject: [PATCH] Allow ansible_ssh_args to be set as an inventory variable Before this change, ssh_args could be set only in the [ssh_connection] section of ansible.cfg, and was applied to all hosts. Now it's possible to set ansible_ssh_args as an inventory variable (directly, or through group_vars or host_vars) to selectively override the global setting. Note that the default ControlPath settings are applied only if ssh_args is not set, and this is true of ansible_ssh_args as well. So if you want to override ssh_args but continue to set ControlPath, you'll need to repeat the appropriate options when setting ansible_ssh_args. (If you only need to add options to the default ssh_args, you may be able to use the ansible_ssh_extra_args inventory variable instead.) --- docsite/rst/intro_inventory.rst | 4 +++- lib/ansible/plugins/connections/ssh.py | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docsite/rst/intro_inventory.rst b/docsite/rst/intro_inventory.rst index d885fa3c708..f4b149685de 100644 --- a/docsite/rst/intro_inventory.rst +++ b/docsite/rst/intro_inventory.rst @@ -211,9 +211,11 @@ SSH connection:: The ssh password to use (this is insecure, we strongly recommend using --ask-pass or SSH keys) ansible_ssh_private_key_file Private key file used by ssh. Useful if using multiple keys and you don't want to use SSH agent. + ansible_ssh_args + This setting overrides any ``ssh_args`` configured in ``ansible.cfg``. ansible_ssh_extra_args Additional arguments for ssh. Useful to configure a ``ProxyCommand`` for a certain host (or group). - This is used in addition to any ``ssh_args`` configured in ``ansible.cfg``. + This is used in addition to any ``ssh_args`` configured in ``ansible.cfg`` or the inventory. Privilege escalation (see :doc:`Ansible Privilege Escalation` for further details):: diff --git a/lib/ansible/plugins/connections/ssh.py b/lib/ansible/plugins/connections/ssh.py index 5ad36677f92..369d1822488 100644 --- a/lib/ansible/plugins/connections/ssh.py +++ b/lib/ansible/plugins/connections/ssh.py @@ -59,11 +59,14 @@ class Connection(ConnectionBase): self.host = self._play_context.remote_addr self.ssh_extra_args = '' + self.ssh_args = '' def set_host_overrides(self, host): v = host.get_vars() if 'ansible_ssh_extra_args' in v: self.ssh_extra_args = v['ansible_ssh_extra_args'] + if 'ansible_ssh_args' in v: + self.ssh_args = v['ansible_ssh_args'] @property def transport(self): @@ -78,10 +81,10 @@ class Connection(ConnectionBase): if self._connected: return self - extra_args = C.ANSIBLE_SSH_ARGS - if extra_args is not None: + ssh_args = self.ssh_args or C.ANSIBLE_SSH_ARGS + if ssh_args is not None: # make sure there is no empty string added as this can produce weird errors - self._common_args += [x.strip() for x in shlex.split(extra_args) if x.strip()] + self._common_args += [x.strip() for x in shlex.split(ssh_args) if x.strip()] else: self._common_args += ( "-o", "ControlMaster=auto",