First of all: this is a re-post of an article from another blog, I do not want to take someone else credit! You can find original post HERE 😉
Many thanks to its author, you save lot of my time!
Just want to share it since it was really useful in fixing a bunch of servers at once, so you can use “my” solution or simply go to the original post and check another alternatives.
Basic idea is to use Ansible to update OpenSSL on all you server and restart all impacted services.
Simple and effective! Find the original script here: https://github.com/jdauphant/patch-openssl-CVE-2014-0160/blob/master/patch-openssl-CVE-2014-0160.yml
My only addition are sudo and remote_user siche my playbook set expect them into the playbook itself:
--- - hosts: all remote_user: my_sudo_user sudo: True vars: openssl_packages: ["openssl","libssl1.0.0"] openssl_impacted_service: - nginx - apache2 - postgresql - php5-fpm - openvpn - postfix - monit - zabbix-server tasks: - name: ensure openssl is the last version apt: pkg={{item}} state=latest update_cache=yes register: openssl_updated with_items: openssl_packages when: ansible_os_family == "Debian" - name: check if service need to be restarted shell: "lsof -n | grep 'DEL.*libssl.so'" register: result_check failed_when: result_check.rc > 1 changed_when: result_check.rc != 1 always_run: yes - name: test running services command: "service {{item}} status | grep -i running" register: services_status with_items: openssl_impacted_service when: result_check.rc == 0 or openssl_updated.changed ignore_errors: true always_run: yes - name: restart running service service: name={{item.item}} state=restarted with_items: services_status.results when: (result_check.rc == 0 or openssl_updated.changed ) and item.rc == 0 - name: ensure no more service need to be restarted shell: "lsof -n | grep 'DEL.*libssl.so'" register: result failed_when: result.rc == 0 changed_when: result.rc != 1 always_run: yes
