sshd
OpenSSH Сервер
Эта роль настраивает демон OpenSSH. Она:
- По умолчанию настраивает SSH демон с обычными значениями ОС.
- Работает с различными дистрибутивами
UN*X
. - Может быть настроена с помощью словарей или простых переменных.
- Поддерживает наборы Match.
- Поддерживает все опции
sshd_config
. Шаблоны генерируются программно. (см.meta/make_option_lists
) - Тестирует
sshd_config
перед перезагрузкой sshd.
ПРЕДУПРЕЖДЕНИЕ Неправильная настройка этой роли может заблокировать доступ к вашему серверу! Пожалуйста, протестируйте вашу настройку и ее взаимодействие с конфигурацией пользователей прежде чем использовать в production!
ПРЕДУПРЕЖДЕНИЕ Digital Ocean позволяет вход для root с паролями через SSH на Debian и
Ubuntu. Это не значение по умолчанию, установленное этим модулем - он установит
PermitRootLogin без пароля
, что позволит доступ только с помощью SSH ключа, но не
с простым паролем. Если вам нужна эта функциональность, обязательно установите
sshd_PermitRootLogin yes
для этих хостов.
Требования
Протестировано на:
- Ubuntu precise, trusty, xenial, bionic, focal, jammy, noble
- Debian wheezy, jessie, stretch, buster, bullseye, bookworm
- EL 6, 7, 8, 9, 10 производные дистрибутивы
- Все Fedora
- Последний Alpine
- FreeBSD 10.1
- OpenBSD 6.0
- AIX 7.1, 7.2
- OpenWrt 21.03
Скорее всего, будет работать и на других дистрибутивах, дополнительные vars/ файлы приветствуются.
Дополнительные требования
Если вы хотите использовать расширенные функции этой роли, которые могут настраивать
брандмауэр и selinux, что чаще всего полезно при использовании нестандартного порта,
роль требует дополнительных коллекций, указанных в
meta/collection-requirements.yml
. Эти коллекции не устанавливаются автоматически.
Если вы хотите управлять системами rpm-ostree
, требуются дополнительные коллекции.
Установите их следующим образом:
ansible-galaxy install -vv -r meta/collection-requirements.yml
Для получения дополнительной информации смотрите опции sshd_manage_firewall
и sshd_manage_selinux
ниже, а также раздел rpm-ostree
. Эта дополнительная функциональность
поддерживается только на Linux на базе Red Hat.
Переменные роли
Главные переменные роли
Если не настроено, эта роль предоставит sshd_config
, который соответствует
значениям по умолчанию ОС, за исключением комментариев и в другом порядке.
sshd_enable
Если установлено на false, роль будет полностью отключена. По умолчанию true.
sshd_skip_defaults
Если установлено на true, значения по умолчанию применяться не будут. Это означает, что у вас должен быть
полный набор конфигурационных значений через либо словарь sshd
, либо
переменные sshd_Key
. По умолчанию false, если не установлено sshd_config_namespace
или
sshd_config_file
указывает на каталог drop-in для избежания рекурсивных включений.
sshd_manage_service
Если установлено на false, сервис/демон не будет управляться вообще, т.е. не
будет пытаться включить при загрузке или запустить или перезагрузить сервис. По умолчанию true,
если только: работа не происходит внутри контейнера Docker (предполагается, что ansible используется в процессе сборки) или AIX (модуль Ansible service
в настоящее время не поддерживает enabled
для AIX).
sshd_allow_reload
Если установлено на false, перезагрузка sshd не произойдет при изменениях. Это может помочь с
устранением неполадок. Вам нужно будет вручную перезагрузить sshd, если вы хотите применить
изменённую конфигурацию. По умолчанию такое же значение, как и у sshd_manage_service
.
(Кроме AIX, где sshd_manage_service
по умолчанию false, но
sshd_allow_reload
по умолчанию true).
sshd_install_service
Если установлено на true, роль установит файлы сервисов для SSH. По умолчанию false.
Шаблоны для используемых файлов сервисов указаны переменными
sshd_service_template_service
(по умолчанию:templates/sshd.service.j2
)sshd_service_template_at_service
(по умолчанию:templates/[email protected]
)sshd_service_template_socket
(по умолчанию:templates/sshd.socket.j2
)
Используя эти переменные, вы можете использовать свои собственные пользовательские шаблоны. С вышеуказанными
шаблонами по умолчанию, имя установленного SSH сервиса будет предоставлено переменной
sshd_service
.
sshd_manage_firewall
Если установлено на true, порты SSH будут открыты в брандмауэре. Обратите внимание, это работает только в ОС на базе Red Hat. Значение по умолчанию false.
ПРИМЕЧАНИЕ: sshd_manage_firewall
ограничен только добавлением портов. Его нельзя использовать
для удаления портов. Если вы хотите удалить порты, вам нужно будет использовать
роль брандмауэра напрямую.
sshd_manage_selinux
Если установлено на true, selinux будет настроен, чтобы позволить sshd слушать на указанных портах SSH. Обратите внимание, это работает только в ОС на базе Red Hat. Значение по умолчанию false.
ПРИМЕЧАНИЕ: sshd_manage_selinux
ограничен только добавлением политик. Его нельзя использовать
для удаления политик. Если вы хотите удалить порты, вам нужно будет использовать
роль selinux напрямую.
sshd
Словарь, содержащий конфигурацию. например,
sshd:
Compression: delayed
ListenAddress:
- 0.0.0.0
sshd_<OptionName>
Можно использовать простые переменные вместо словаря. Простые значения переопределяют значения словаря. Например:
sshd_Compression: off
Во всех случаях булевы значения корректно отображаются как yes и no в конфигурации sshd. Можно использовать списки для многострочных конфигурационных элементов. Например:
sshd_ListenAddress:
- 0.0.0.0
- '::'
Отобразится как:
ListenAddress 0.0.0.0
ListenAddress ::
sshd_match, sshd_match_1 до sshd_match_9
Список словарей или просто словарь для блоков Match. Обратите внимание, что эти переменные
не переопределяют блоки match, определенные в словаре sshd
. Все источники
отразятся в итоговом конфигурационном файле. Использование варианта
sshd_match_*
устарело и больше не рекомендуется.
sshd_backup
Если установлено на false, оригинальный файл sshd_config
не будет сохранен. Значение
по умолчанию true.
sshd_sysconfig
На системах на базе RHEL, sysconfig используется для настройки более детальной информации о сервисе sshd. Если установлено на true, эта роль также будет управлять файлом конфигурации /etc/sysconfig/sshd
на основе следующих конфигураций. Значение по умолчанию false.
sshd_sysconfig_override_crypto_policy
В системах на базе RHEL8, это может быть использовано для переопределения системной криптографической политики путем установки на true. Без этой опции изменения шифров, MAC, общеизвестных алгоритмов ключей не будут иметь эффекта на итоговый сервис в RHEL8. Значение по умолчанию false.
sshd_sysconfig_use_strong_rng
В системах на базе RHEL (до RHEL9) это может быть использовано для принудительного управления sshd для перегенерации случайных чисел OpenSSL с заданным количеством байт в качестве аргумента. Значение по умолчанию 0, что отключает эту функциональность. Не рекомендуется включать это, если система не имеет аппаратного генератора случайных чисел.
sshd_config_file
Путь, по которому конфигурация openssh, созданная этой ролью, должна быть сохранена. Это полезно в основном при генерации фрагментов конфигурации для включения из каталога drop-in (по умолчанию в Fedora и RHEL9).
Когда этот путь указывает на каталог drop-in (например,
/etc/ssh/sshd_config.d/00-custom.conf
), основной конфигурационный файл (определенный
переменной sshd_main_config_file
) проверяется на наличие правильной
директивы Include
.
sshd_main_config_file
Когда система использует каталог drop-in, эта опция может быть использована для установки
пути к основному конфигурационному файлу и позволяет настраивать только
файл конфигурации drop-in с помощью sshd_config_file
. Это полезно в случаях,
когда вам нужно настроить вторую независимую службу sshd с другим
файлом конфигурации. Это также файл, используемый в файле сервиса.
На системах без каталога drop-in по умолчанию None. В противном случае по умолчанию
/etc/ssh/sshd_config
. Когда sshd_config_file
установлен вне каталога drop-in (его родительский каталог не
sshd_main_config_file
~ '.d'), эта переменная игнорируется.
sshd_config_namespace
По умолчанию (null), роль определяет все содержимое конфигурационного файла,
включая системные значения по умолчанию. Вы можете использовать эту переменную, чтобы вызывать эту роль из
других ролей или из нескольких мест в одном плейбуке как альтернативу
использованию каталога drop-in. При этом игнорируется sshd_skip_defaults
, и системные
значения по умолчанию не используются.
Когда эта переменная установлена, роль помещает конфигурацию, которую вы указываете, в конфигурационные фрагменты в существующем конфигурационном файле под указанным пространством имен. Вам необходимо выбирать разные пространства имен при вызове роли несколько раз.
Обратите внимание, что ограничения конфигурационного файла openssh все еще применяются. Например, только первый указанный параметр в конфигурационном файле имеет эффекция для большинства переменных.
Технически, роль помещает фрагменты в блоки Match all
, если они не содержат
других блоков match, чтобы гарантировать их применение независимо от предыдущих блоков match
в существующем конфигурационном файле. Это позволяет настраивать любые
несоответствующие параметры из разных вызовов ролей.
sshd_config_owner, sshd_config_group, sshd_config_mode
Используйте эти переменные, чтобы установить владельца и права доступа для конфигурационного файла openssh, который создает эта роль.
sshd_verify_hostkeys
По умолчанию (auto), этот список содержит все ключи хоста, которые присутствуют в сгенерированном конфигурационном файле. Если их нет, будет использован список по умолчанию OpenSSH после исключения ключей, не одобренных FIPS в режиме FIPS. Пути проверяются на наличие, и новые ключи генерируются, если они отсутствуют. Кроме того, права доступа и владельцы файлов устанавливаются на разумные значения по умолчанию. Это полезно, если роль используется на этапе развертывания, чтобы убедиться, что сервис может запуститься с первой попытки.
Чтобы отключить эту проверку, установите это в пустой список.
sshd_hostkey_owner, sshd_hostkey_group, sshd_hostkey_mode
Используйте эти переменные, чтобы установить владельца и права доступа для ключей хоста из вышеупомянутого списка.
Вторичные переменные роли
Эти переменные используются внутренними компонентами роли и могут быть использованы для переопределения значений по умолчанию, которые соответствуют каждой поддерживаемой платформе. Их не тестируют и в общем они не нужны, так как роль определит их по типу ОС.
sshd_packages
Используйте эту переменную для переопределения списка пакетов по умолчанию для установки.
sshd_binary
Путь к исполняемому файлу openssh.
sshd_service
Имя службы openssh. По умолчанию эта переменная содержит имя
службы ssh, которую использует целевая платформа. Но ее также можно использовать для установки
имени пользовательской службы ssh, когда используется переменная sshd_install_service
.
sshd_sftp_server
Путь по умолчанию к двоичному файлу сервера sftp.
Переменные, экспортируемые ролью
sshd_has_run
Эта переменная устанавливается в true после успешного выполнения роли.
Настройка аутентификации по сертификатам SSH
Чтобы настроить аутентификацию по сертификатам SSH на вашем сервере SSH, вы должны предоставить как минимум доверенный ключ CA пользователя, который будет использоваться для проверки клиентских сертификатов.
Это делается с помощью переменной sshd_trusted_user_ca_keys_list
.
Если вам нужно сопоставить некоторых авторизованных принципалов с системными пользователями, вы можете сделать это с помощью переменной sshd_principals
.
Дополнительные переменные
sshd_trusted_user_ca_keys_list
Список публичных ключей доверенных пользователей CA в формате OpenSSH (в одну строку) (обязательно).
sshd_trustedusercakeys_directory_owner, shsd_trustedusercakeys_directory_group, sshd_trustedusercakeys_directory_mode
Используйте эти переменные, чтобы установить владельца и права доступа для каталога ключей Trusted User CA. Значения по умолчанию: root, root и 0755.
sshd_trustedusercakeys_file_owner, shsd_trustedusercakeys_file_group, sshd_trustedusercakeys_file_mode
Используйте эти переменные, чтобы установить владельца и права доступа для файла ключей Trusted User CA. Значения по умолчанию: root, root и 0640.
sshd_principals
Словарь, содержащий принципалов для пользователей в ОС (опционально). Например:
sshd_principals:
admin:
- frontend-admin
- backend-admin
somelinuxuser:
- some-principal-defined-in-certificate
sshd_authorizedprincipals_directory_owner, shsd_authorizedprincipals_directory_group, sshd_authorizedprincipals_directory_mode
Используйте эти переменные, чтобы установить владельца и права доступа для каталога авторизованных принципалов. Значения по умолчанию: root, root и 0755.
sshd_authorizedprincipals_file_owner, shsd_authorizedprincipals_file_group, sshd_authorizedprincipals_file_mode
Используйте эти переменные, чтобы установить владельца и права доступа для файла авторизованных принципалов. Значения по умолчанию: root, root и 0644.
Дополнительная конфигурация
Сервер SSH нуждается в этой информации, хранящейся в файлах, поэтому, помимо вышеупомянутых переменных, соответствующие параметры конфигурации TrustedUserCAKeys
(обязательно) и AuthorizedPrincipalsFile
(необязательно) должны присутствовать в словаре sshd
при вызове роли. Например:
sshd:
TrustedUserCAKeys: /etc/ssh/path-to-trusted-user-ca-keys/trusted-user-ca-keys.pub
AuthorizedPrincipalsFile: "/etc/ssh/path-to-auth-principals/auth_principals/%u"
Чтобы узнать больше о сертификатах SSH, вот хороший учебник о чистых сертификатах SSH из Викикниг.
Чтобы понять принципалы и настроить сертификаты SSH с Vault, вот хорошо объясняющий учебник от Hashicorp.
Зависимости
Нет
Для тестов требуется коллекция ansible.posix
для роли mount
для
эмуляции режима FIPS.
Пример плейбука
ОПАСНО! Этот пример предназначен для демонстрации возможностей конфигурации, предоставляемых этой ролью. Его запуск, скорее всего, нарушит ваш SSH доступ к серверу!
---
- hosts: all
vars:
sshd_skip_defaults: true
sshd:
Compression: true
ListenAddress:
- "0.0.0.0"
- "::"
GSSAPIAuthentication: false
Match:
- Condition: "Group user"
GSSAPIAuthentication: true
sshd_UsePrivilegeSeparation: false
sshd_match:
- Condition: "Group xusers"
X11Forwarding: true
roles:
- role: willshersystems.sshd
Вывод будет:
# Ansible managed: ...
Compression yes
GSSAPIAuthentication no
UsePrivilegeSeparation no
Match Group user
GSSAPIAuthentication yes
Match Group xusers
X11Forwarding yes
С версии Ansible 2.4 роль можно вызывать с помощью ключевого слова include_role
,
например:
---
- hosts: all
become: true
tasks:
- name: "Настроить sshd"
include_role:
name: willshersystems.sshd
vars:
sshd_skip_defaults: true
sshd:
Compression: true
ListenAddress:
- "0.0.0.0"
- "::"
GSSAPIAuthentication: false
Match:
- Condition: "Group user"
GSSAPIAuthentication: true
sshd_UsePrivilegeSeparation: false
sshd_match:
- Condition: "Group xusers"
X11Forwarding: true
Вы также можете просто добавить фрагмент конфигурации с опцией sshd_config_namespace
:
---
- hosts: all
tasks:
- name: Настроить sshd для приема полезных переменных окружения
include_role:
name: willshersystems.sshd
vars:
sshd_config_namespace: accept-env
sshd:
# некоторые полезные переменные окружения для принятия
AcceptEnv:
LANG
LS_COLORS
EDITOR
Следующий фрагмент будет добавлен в файл конфигурации по умолчанию (если еще не присутствует):
# BEGIN sshd system role managed block: namespace accept-env
Match all
AcceptEnv LANG LS_COLORS EDITOR
# END sshd system role managed block: namespace accept-env
Больше примеров плейбуков можно найти в директории examples/
.
Генерация шаблонов
Шаблоны sshd_config.j2
и
sshd_config_snippet.j2
генерируются программно
с помощью скриптов в meta. Новые опции должны добавляться
в options_body
и/или options_match
.
Чтобы перегенерировать шаблоны, находясь в каталоге meta/
, выполните:
./make_option_lists
rpm-ostree
Смотрите README-ostree.md
Лицензия
LGPLv3
Авторы
Мэтт Уилшер matt@willsher.systems
© 2014,2015 Willsher Systems Ltd.
Якуб Елен jjelen@redhat.com
© 2020 - 2024 Red Hat, Inc.
OpenSSH SSH daemon configuration
ansible-galaxy install willshersystems/ansible-sshd