# {{ansible_managed}} # This is the ssh client system-wide configuration file. # See ssh_config(5) for more information on any settings used. Comments will be added only to clarify why a configuration was chosen. # # Basic configuration # =================== # Address family should always be limited to the active network configuration. AddressFamily {{ 'any' if network_ipv6_enable else 'inet' }} {% for host in ssh_remote_hosts -%} {% if loop.first %} # Host-specific configuration {% endif %} Host {{ host.names | join(' ') }} {{ host.options | join("\n") | indent(2) }} {% endfor -%} # Global defaults for all Hosts Host * # The port at the destination should be defined Port {{ ssh_client_port }} # Identity file configuration. You may restrict available identity files. Otherwise ssh will search for a pattern and use any that matches. #IdentityFile ~/.ssh/identity #IdentityFile ~/.ssh/id_rsa #IdentityFile ~/.ssh/id_dsa # Security configuration # ====================== # Set the protocol version to 2 for security reasons. Disables legacy support. Protocol 2 # Make sure passphrase querying is enabled BatchMode no # Prevent IP spoofing by checking to host IP against the `known_hosts` file. CheckHostIP yes # Always ask before adding keys to the `known_hosts` file. Do not set to `yes`. StrictHostKeyChecking ask # **Ciphers** -- If your clients don't support CTR (eg older versions), cbc will be added # CBC: is true if you want to connect with OpenSSL-base libraries # eg ruby Net::SSH::Transport::CipherFactory requires cbc-versions of the given openssh ciphers to work # -- see: (http://net-ssh.github.com/net-ssh/classes/Net/SSH/Transport/CipherFactory.html) # {% if ssh_client_cbc_required -%} {% if (ansible_distribution == 'Ubuntu' and ansible_distribution_version >= '14.04') or (ansible_distribution == 'Debian' and ansible_distribution_version >= '8') or (ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version >= '7') or (ansible_distribution == 'FreeBSD' and ansible_distribution_version >= '11') -%} Ciphers {{ ssh_ciphers_66_weak | join(',') }} {% else -%} Ciphers {{ ssh_ciphers_53_weak | join(',') }} {% endif %} {% else -%} {% if (ansible_distribution == 'Ubuntu' and ansible_distribution_version >= '14.04') or (ansible_distribution == 'Debian' and ansible_distribution_version >= '8') or (ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version >= '7') or (ansible_distribution == 'FreeBSD' and ansible_distribution_version >= '11') -%} Ciphers {{ ssh_ciphers_66_default | join(',') }} {% else -%} Ciphers {{ ssh_ciphers_53_default | join(',') }} {% endif %} {% endif %} # **Hash algorithms** -- Make sure not to use SHA1 for hashing, unless it is really necessary. # Weak HMAC is sometimes required if older package versions are used # eg Ruby's Net::SSH at around 2.2.* doesn't support sha2 for hmac, so this will have to be set true in this case. # {% if ssh_client_weak_hmac -%} {% if (ansible_distribution == 'Ubuntu' and ansible_distribution_version >= '14.04') or (ansible_distribution == 'Debian' and ansible_distribution_version >= '8') or (ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version >= '7') or (ansible_distribution == 'FreeBSD' and ansible_distribution_version >= '11') -%} MACs {{ ssh_macs_66_weak | join(',') }} {% elif ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version <= '6' -%} MACs {{ ssh_macs_53_default | join(',') }} {% endif %} {% else -%} {% if (ansible_distribution == 'Ubuntu' and ansible_distribution_version >= '14.04') or (ansible_distribution == 'Debian' and ansible_distribution_version >= '8') or (ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version >= '7') or (ansible_distribution == 'FreeBSD' and ansible_distribution_version >= '11') -%} MACs {{ ssh_macs_66_default | join(',') }} {% elif ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version <= '6' -%} MACs {{ ssh_macs_53_default | join(',') }} {% else -%} MACs {{ ssh_macs_59_default | join(',') }} {% endif %} {% endif %} # Alternative setting, if OpenSSH version is below v5.9 #MACs hmac-ripemd160 # **Key Exchange Algorithms** -- Make sure not to use SHA1 for kex, unless it is really necessary # Weak kex is sometimes required if older package versions are used # eg ruby's Net::SSH at around 2.2.* doesn't support sha2 for kex, so this will have to be set true in this case. # {% if (ansible_distribution == 'Ubuntu' and ansible_distribution_version >= '14.04') or (ansible_distribution == 'Debian' and ansible_distribution_version >= '8') or (ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version >= '7') or (ansible_distribution == 'FreeBSD' and ansible_distribution_version >= '11') -%} {% if ssh_client_weak_kex -%} KexAlgorithms {{ ssh_kex_66_weak | join(',') }} {% else -%} KexAlgorithms {{ ssh_kex_66_default | join(',') }} {% endif %} {% else -%} {% if ansible_os_family in ['Oracle Linux', 'RedHat'] and ansible_distribution_major_version <= '6' -%} #KexAlgorithms {% elif ssh_client_weak_kex -%} KexAlgorithms {{ ssh_kex_59_weak | join(',') }} {% else -%} KexAlgorithms {{ ssh_kex_59_default | join(',') }} {% endif %} {% endif %} # Disable agent forwarding, since local agent could be accessed through forwarded connection. ForwardAgent no # Disable X11 forwarding, since local X11 display could be accessed through forwarded connection. ForwardX11 no # Never use host-based authentication. It can be exploited. HostbasedAuthentication no RhostsRSAAuthentication no # Enable RSA authentication via identity files. RSAAuthentication yes # Disable password-based authentication, it can allow for potentially easier brute-force attacks. PasswordAuthentication {{ 'yes' if ssh_client_password_login else 'no' }} # Only use GSSAPIAuthentication if implemented on the network. GSSAPIAuthentication no GSSAPIDelegateCredentials no # Disable tunneling Tunnel no # Disable local command execution. PermitLocalCommand no # Misc. configuration # =================== # Enable compression. More pressure on the CPU, less on the network. Compression yes #EscapeChar ~ #VisualHostKey yes # Disable experimental client roaming. This is known to cause potential issues with secrets being disclosed to malicious servers and defaults to being disabled. UseRoaming {{ 'yes' if ssh_client_roaming else 'no' }}