diff --git a/docsite/rst/intro_inventory.rst b/docsite/rst/intro_inventory.rst index 5afffb0fe50..d885fa3c708 100644 --- a/docsite/rst/intro_inventory.rst +++ b/docsite/rst/intro_inventory.rst @@ -211,6 +211,9 @@ 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_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``. 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 6dae226722b..22a9c41dfde 100644 --- a/lib/ansible/plugins/connections/ssh.py +++ b/lib/ansible/plugins/connections/ssh.py @@ -58,6 +58,12 @@ class Connection(ConnectionBase): super(Connection, self).__init__(*args, **kwargs) self.host = self._play_context.remote_addr + self.ssh_extra_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'] @property def transport(self): @@ -114,6 +120,12 @@ class Connection(ConnectionBase): self._common_args += ("-o", "User={0}".format(self._play_context.remote_user)) self._common_args += ("-o", "ConnectTimeout={0}".format(self._play_context.timeout)) + # If any extra SSH arguments are specified in the inventory for + # this host, add them in. + if self.ssh_extra_args is not None: + extra_args = self.ssh_extra_args + self._common_args += [x.strip() for x in shlex.split(extra_args) if x.strip()] + self._connected = True return self