# -*- coding: utf-8 -*- # vim: ft=yaml --- # yamllint disable rule:line-length # Using a stripped down version of both `sshd_config` and `ssh_config` here # The values introduced by the initial commit are taken from the Travis # instances themselves # Care must be taken when modifying this, not to lock out Travis before the # `kitchen verify` stage takes place, resulting in: # ``` # $$$$$$ [SSH] connection failed, terminating (#) # >>>>>> ------Exception------- # >>>>>> Class: Kitchen::ActionFailed # >>>>>> Message: 1 actions failed. # >>>>>> Failed to complete #verify action: [Transport error, can't connect to 'ssh' backend: SSH session could not be established] on ... # ``` # yamllint enable rule:line-length sshd_config: ChallengeResponseAuthentication: 'no' X11Forwarding: 'yes' PrintMotd: 'no' AcceptEnv: "LANG LC_*" Subsystem: "sftp /usr/lib/openssh/sftp-server" {%- if grains.os != "OpenBSD" %} UsePAM: 'yes' {%- endif %} {#- Need this on various platforms to avoid the `kitchen verify` failure as mentioned above; see: #} {#- * https://gitlab.com/saltstack-formulas/infrastructure/salt-image-builder/-/commit/cb6781a2bba9 #} {%- if grains.os in ["Arch", "OpenBSD", "Gentoo"] or grains.get("oscodename", "") in ["openSUSE Tumbleweed"] or grains.get("osfinger", "") in ["Fedora Linux-36", "Ubuntu-22.04"] %} PubkeyAcceptedAlgorithms: "+ssh-rsa" {%- endif %} ssh_config: Hosts: '*': GSSAPIAuthentication: 'yes' HashKnownHosts: 'yes' SendEnv: 'LANG LC_*' openssh: # Instead of adding a custom banner file you can set it in pillar banner_string: | Welcome to {{ grains['id'] }}! # Set installed package version server_version: latest client_version: latest # Controls if SSHD should be enabled/started sshd_enable: true auth: joe-valid-ssh-key-desktop: - user: joe present: true enc: ssh-rsa comment: main key - desktop source: salt://ssh_keys/joe.desktop.pub joe-valid-ssh-key-notebook: - user: joe present: true enc: ssh-rsa comment: main key - notebook source: salt://ssh_keys/joe.netbook.pub joe-non-valid-ssh-key: - user: joe present: false enc: ssh-rsa comment: obsolete key - removed source: salt://ssh_keys/joe.no-valid.pub # Maps users to source files # Designed to play nice with ext_pillar # salt.states.ssh_auth: If source is set, comment and enc will be ignored auth_map: personal_keys: # store name source: salt://ssh_keys users: joe: joe.desktop: {} joe.netbook: options: [] # see salt.states.ssh_auth.present joe.no-valid: present: false generate_dsa_keys: false absent_dsa_keys: false provide_dsa_keys: false dsa: private_key: | -----BEGIN DSA PRIVATE KEY----- NOT_DEFINED -----END DSA PRIVATE KEY----- public_key: | ssh-dss NOT_DEFINED generate_ecdsa_keys: false absent_ecdsa_keys: false provide_ecdsa_keys: false ecdsa: private_key: | -----BEGIN EC PRIVATE KEY----- NOT_DEFINED -----END EC PRIVATE KEY----- public_key: | ecdsa-sha2-nistp256 NOT_DEFINED generate_rsa_keys: false generate_rsa_size: 4096 # Will remove the old key if it is to short and generate a new one. enforce_rsa_size: false absent_rsa_keys: false provide_rsa_keys: false rsa: private_key: | -----BEGIN RSA PRIVATE KEY----- NOT_DEFINED -----END RSA PRIVATE KEY----- public_key: | ssh-rsa NOT_DEFINED generate_ed25519_keys: false absent_ed25519_keys: false provide_ed25519_keys: false ed25519: private_key: | -----BEGIN OPENSSH PRIVATE KEY----- NOT_DEFINED -----END OPENSSH PRIVATE KEY----- public_key: | ssh-ed25519 NOT_DEFINED known_hosts: # The next 2 settings restrict the set of minions that will be added in # the generated ssh_known_hosts files (the default is to match all minions) target: '*' tgt_type: 'glob' # Name of mining functions used to gather public keys and hostnames # (the default values are shown here) mine_keys_function: public_ssh_host_keys mine_hostname_function: public_ssh_hostname # List of DNS entries also pointing to our managed machines and that we want # to inject in our generated ssh_known_hosts file aliases: - cname-to-minion.example.org - alias.example.org # Includes short hostnames derived from the FQDN # (host.example.test -> host) # (Deactivated by default, because there can be collisions!) hostnames: false # hostnames: # Restrict wich hosts you want to use via their hostname # (i.e. ssh user@host instead of ssh user@host.example.com) # target: '*' # Defaults to "*.{{ grains['domain']}}" # tgt_type: 'glob' # To activate the defaults you can just set an empty dict. # hostnames: {} # Include localhost, 127.0.0.1 and ::1 (default: false) include_localhost: false # Host keys fetched via salt-ssh salt_ssh: # The salt-ssh user user: salt-master # specify public host names of a minion public_ssh_host_names: minion.id: - minion.id - alias.of.minion.id # specify public host keys of a minion public_ssh_host_keys: minion.id: | ssh-rsa [...] ssh-ed25519 [...] # Here you can list keys for hosts which are not among your minions: static: github.com: 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGm[...]' gitlab.com: 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bN[...]' omit_ip_address: - github.com # specify DH parameters (see /etc/ssh/moduli) # yamllint disable rule:line-length moduli: | # Time Type Tests Tries Size Generator Modulus 20120821045639 2 6 100 2047 2 DD2047CBDBB6F8E919BC63DE885B34D0FD6E3DB2887D8B46FE249886ACED6B46DFCD5553168185FD376122171CD8927E60120FA8D01F01D03E58281FEA9A1ABE97631C828E41815F34FDCDF787419FE13A3137649AA93D2584230DF5F24B5C00C88B7D7DE4367693428C730376F218A53E853B0851BAB7C53C15DA7839CBE1285DB63F6FA45C1BB59FE1C5BB918F0F8459D7EF60ACFF5C0FA0F3FCAD1C5F4CE4416D4F4B36B05CDCEBE4FB879E95847EFBC6449CD190248843BC7EDB145FBFC4EDBB1A3C959298F08F3BA2CFBE231BBE204BE6F906209D28BD4820AB3E7BE96C26AE8A809ADD8D1A5A0B008E9570FA4C4697E116B8119892C604293680B09D63 20120821045830 2 6 100 2047 2 DD2047CBDBB6F8E919BC63DE885B34D0FD6E3DB2887D8B46FE249886ACED6B46DFCD5553168185FD376122171CD8927E60120FA8D01F01D03E58281FEA9A1ABE97631C828E41815F34FDCDF787419FE13A3137649AA93D2584230DF5F24B5C00C88B7D7DE4367693428C730376F218A53E853B0851BAB7C53C15DA7839CBE1285DB63F6FA45C1BB59FE1C5BB918F0F8459D7EF60ACFF5C0FA0F3FCAD1C5F4CE4416D4F4B36B05CDCEBE4FB879E95847EFBC6449CD190248843BC7EDB145FBFC4EDBB1A3C959298F08F3BA2CFBE231BBE204BE6F906209D28BD4820AB3E7BE96C26AE8A809ADD8D1A5A0B008E9570FA4C4697E116B8119892C6042936814C2FFB 20120821050046 2 6 100 2047 2 DD2047CBDBB6F8E919BC63DE885B34D0FD6E3DB2887D8B46FE249886ACED6B46DFCD5553168185FD376122171CD8927E60120FA8D01F01D03E58281FEA9A1ABE97631C828E41815F34FDCDF787419FE13A3137649AA93D2584230DF5F24B5C00C88B7D7DE4367693428C730376F218A53E853B0851BAB7C53C15DA7839CBE1285DB63F6FA45C1BB59FE1C5BB918F0F8459D7EF60ACFF5C0FA0F3FCAD1C5F4CE4416D4F4B36B05CDCEBE4FB879E95847EFBC6449CD190248843BC7EDB145FBFC4EDBB1A3C959298F08F3BA2CFBE231BBE204BE6F906209D28BD4820AB3E7BE96C26AE8A809ADD8D1A5A0B008E9570FA4C4697E116B8119892C60429368214FC53 20120821050054 2 6 100 2047 5 DD2047CBDBB6F8E919BC63DE885B34D0FD6E3DB2887D8B46FE249886ACED6B46DFCD5553168185FD376122171CD8927E60120FA8D01F01D03E58281FEA9A1ABE97631C828E41815F34FDCDF787419FE13A3137649AA93D2584230DF5F24B5C00C88B7D7DE4367693428C730376F218A53E853B0851BAB7C53C15DA7839CBE1285DB63F6FA45C1BB59FE1C5BB918F0F8459D7EF60ACFF5C0FA0F3FCAD1C5F4CE4416D4F4B36B05CDCEBE4FB879E95847EFBC6449CD190248843BC7EDB145FBFC4EDBB1A3C959298F08F3BA2CFBE231BBE204BE6F906209D28BD4820AB3E7BE96C26AE8A809ADD8D1A5A0B008E9570FA4C4697E116B8119892C60429368218E83F # yamllint enable rule:line-length # ALTERNATIVELY, specify the location of the moduli file. Examples: # moduli_source: http://some.server.somewhere/salt/moduli # moduli_source: salt://files/ssh/moduli # If moduli is specified, moduli_source will be ignored. # Also, a proper hash file *must* be included in the same path. E.g.: # http://some.server.somewhere/salt/moduli.hash # salt://files/ssh/moduli.hash # These will be automatically referenced to by the ssh_moduli state. tofs: # The files_switch key serves as a selector for alternative # directories under the formula files directory. See TOFS pattern # doc for more info. # Note: Any value not evaluated by `config.get` will be used literally. # This can be used to set custom paths, as many levels deep as required. # files_switch: # - any/path/can/be/used/here # - id # - role # - osfinger # - os # - os_family # All aspects of path/file resolution are customisable using the options below. # This is unnecessary in most cases; there are sensible defaults. # path_prefix: template_alt # dirs: # files: files_alt # default: default_alt source_files: manage ssh_known_hosts file: - alt_ssh_known_hosts sshd_config: - alt_sshd_config ssh_config: - alt_ssh_config sshd_banner: - fire_banner # Required for openssh.known_hosts mine_functions: public_ssh_host_keys: mine_function: cmd.run cmd: cat /etc/ssh/ssh_host_*_key.pub python_shell: true public_ssh_hostname: mine_function: grains.get key: id