В этом примере мы рассмотрим, как отредактировать конфигурационный файл Linux с помощью Ansible на примере sshd_config. Наш плейбук Ansible должен внести изменения в файл sshd_config и удалить директивы с небезопасными алгоритмами аутентификации.
Предполагаем, что вы уже установили Ansible и создали inventory файл. В предыдущей статье мы показали, как создать пользователя и скопировать ssh ключи с помощью Ansible.
Ниже показан пример плейбука, который с помощью регулярных выражений:
- Редактирует некоторые строки в sshd_config
- Отключает небезопасные алгоритмы аутентификации и включает безопасные
- Добавляет ключи, шифры и MAC
В этом примере мы используем учетную запись пользователя anscfg. Замените ее на вашего пользователя:
secure_ssh_config.yml
---
- hosts: webservers
become: true
remote_user: anscfg
tasks:
- name: Add key exchange, ciphers and MAC
- lineinfile: dest=/etc/ssh/sshd_config regexp='^KexAlgorithms' line='KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256'
- lineinfile: dest=/etc/ssh/sshd_config regexp='^Ciphers' line='Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr'
- name: Enable secure server authentication algorithms and protocol version 2
lineinfile: dest=/etc/ssh/sshd_config regexp='^Protocol 2' line='Protocol 2'
- lineinfile: dest=/etc/ssh/sshd_config regexp='^HostKey /etc/ssh/ssh_host_ed25519_key' line='HostKey /etc/ssh/ssh_host_ed25519_key'
- lineinfile: dest=/etc/ssh/sshd_config regexp='^HostKey /etc/ssh/ssh_host_rsa_key' line='HostKey /etc/ssh/ssh_host_rsa_key'
- name: Disable insecure algorithms
lineinfile:
dest: /etc/ssh/sshd_config
regexp: '^HostKey /etc/ssh/ssh_host_ecdsa_key'
state: absent
- lineinfile:
dest: /etc/ssh/sshd_config
regexp: '^HostKey /etc/ssh/ssh_host_dsa_key'
state: absent
- name: remove key files
file:
dest: /etc/ssh/ssh_host_ecdsa_key.pub
state: absent
- file:
dest: /etc/ssh/ssh_host_ecdsa_key
state: absent
- file:
dest: /etc/ssh/ssh_host_dsa_key.pub
state: absent
- file:
dest: /etc/ssh/ssh_host_dsa_key
state: absent
- name: Disable password login and allow login only with publickey.
lineinfile: dest=/etc/ssh/sshd_config regexp='^#?AuthenticationMethods' line='AuthenticationMethods publickey'
- lineinfile: dest=/etc/ssh/sshd_config regexp='^#?PasswordAuthentication' line='PasswordAuthentication no'
- lineinfile: dest=/etc/ssh/sshd_config regexp='^#?ChallengeResponseAuthentication' line='ChallengeResponseAuthentication no'
- lineinfile: dest=/etc/ssh/sshd_config regexp='^#?PubkeyAuthentication' line='PubkeyAuthentication yes'
# изменить уровень логирования LogLevel на VERBOSE
- lineinfile: dest=/etc/ssh/sshd_config regexp='^LogLevel' line='LogLevel VERBOSE'
# Отключить вход под root
- lineinfile: dest=/etc/ssh/sshd_config regexp='^PermitRootLogin' line='PermitRootLogin No'
# Разрешить вход только под определенным пользователем. Можете заменить на группу (параметра AllowGroups)
- lineinfile: dest=/etc/ssh/sshd_config regexp='^AllowUsers' line='AllowUsers anscfg'
- name: restart sshd.
service:
name: sshd
state: restarted
- debug:
msg: "Ready! If necessary, generate client keys with the following command: ssh-keygen -t ed25519 -o -a 100 && ssh-keygen -t rsa -b 4096 -o -a 100"

Если при деплое такого плейбука при подключении к удаленным хостам вы получите ошибку @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!, удалите файл /home/user/.ssh/known_hosts или удалите старые ключи и попробуйте подключиться снова
