diff --git a/changelogs/fragments/ssh_port_default_fix.yml b/changelogs/fragments/ssh_port_default_fix.yml new file mode 100644 index 00000000000..1d45e60d2a1 --- /dev/null +++ b/changelogs/fragments/ssh_port_default_fix.yml @@ -0,0 +1,2 @@ +bugfixes: + - Remove 'default' from ssh plugin as we want to rely on default from ssh itself or ssh/config. diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py index 0af9ac73d72..02d776e14b7 100644 --- a/lib/ansible/plugins/connection/ssh.py +++ b/lib/ansible/plugins/connection/ssh.py @@ -19,6 +19,9 @@ DOCUMENTATION = ''' extends_documentation_fragment: - connection_pipelining version_added: historical + notes: + - Many options default to 'None' here but that only means we don't override the ssh tool's defaults and/or configuration. + For example, if you specify the port in this plugin it will override any C(Port) entry in your C(.ssh/config). options: host: description: Hostname/ip to connect to. @@ -181,7 +184,6 @@ DOCUMENTATION = ''' port: description: Remote port to connect to. type: int - default: 22 ini: - section: defaults key: remote_port diff --git a/test/integration/targets/connection_ssh/check_ssh_defaults.yml b/test/integration/targets/connection_ssh/check_ssh_defaults.yml new file mode 100644 index 00000000000..937f1f7d44c --- /dev/null +++ b/test/integration/targets/connection_ssh/check_ssh_defaults.yml @@ -0,0 +1,29 @@ +- hosts: ssh + gather_facts: false + vars: + ansible_connection: ssh + ansible_ssh_timeout: 10 + tasks: + - name: contain the maddness + block: + - name: test all is good + ping: + + - name: start the fun + meta: reset_connection + + - name: now test we can use wrong port from ssh/config + ping: + ignore_unreachable: True + vars: + ansible_ssh_args: "-F {{playbook_dir}}/files/port_overrride_ssh.cfg" + register: expected + + - name: check all is as expected + assert: + that: + - expected['unreachable']|bool + - "'2222' in expected['msg']" + always: + - name: make sure we don't cache the bad connection + meta: reset_connection diff --git a/test/integration/targets/connection_ssh/files/port_overrride_ssh.cfg b/test/integration/targets/connection_ssh/files/port_overrride_ssh.cfg new file mode 100644 index 00000000000..7f8422ec7ce --- /dev/null +++ b/test/integration/targets/connection_ssh/files/port_overrride_ssh.cfg @@ -0,0 +1,2 @@ +Host * + Port 2222 diff --git a/test/integration/targets/connection_ssh/runme.sh b/test/integration/targets/connection_ssh/runme.sh index 32dbdd937b6..7e5953edac8 100755 --- a/test/integration/targets/connection_ssh/runme.sh +++ b/test/integration/targets/connection_ssh/runme.sh @@ -65,3 +65,6 @@ fi ANSIBLE_SCP_IF_SSH=true ./posix.sh "$@" "${scp_args[@]}" # piped ANSIBLE_SSH_TRANSFER_METHOD=piped ./posix.sh "$@" + +# test config defaults override +ansible-playbook check_ssh_defaults.yml "$@" -i test_connection.inventory