В этом примере мы рассмотрим, как отредактировать конфигурационный файл 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 или удалите старые ключи и попробуйте подключиться снова