Ansible : 서버를 재 프로비저닝하여 MySQL 서버 루트 비밀번호를 변경하는 방법


14

Ansible 플레이 북으로 서버를 프로비저닝했습니다. 내가 사용했던 루트 / 암반-Ansible 각본을 .

작업 중 하나는 mysql 루트 사용자 비밀번호와 함께 mysql 서버를 설정하는 것이 었습니다.

이제이 비밀번호를 긴급히 변경해야합니다. 내가 취한 단계 :

  1. Ansible 역할에 대한 변수를 업데이트했습니다.
  2. ansible-playbook -i hosts/staging server.yml서버를 다시 프로비저닝하기 위해 명령 을 실행했습니다.

모든 작업이 예상대로 실행되었지만 (변경 사항 없음) 스크립트가 [mariadb | Set root user password]다음 메시지와 함께 실패했습니다 .

msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials

MySQL 루트 암호가 설정되면 서버를 다시 프로비저닝해도이 암호를 변경할 수 없습니다.

Ansible로 서버를 재 프로비저닝하여 MySQL 루트 비밀번호를 변경할 수 있습니까? 내 옵션은 무엇입니까?

답변:


15

문제는 Ansible이 다음과 같이 변경하려는 로그인과 동일한 루트 비밀번호를 사용하려고한다는 것입니다.

- name: Set root user password
  mysql_user: name=root
              host="{{ item }}"
              password="{{ mysql_root_password }}"
              check_implicit_admin=yes
              login_user="{{ mysql_user }}"
              login_password="{{ mysql_root_password }}"
              state=present

이 플레이를 사용하여 변경하려는 경우 분명히 작동하지 않습니다.

대신 위의 플레이를 다음과 같이 변경해야합니다.

- name: Set root user password
  mysql_user: name=root
              host="{{ item }}"
              password="{{ mysql_root_password }}"
              check_implicit_admin=yes
              login_user="{{ mysql_user }}"
              login_password="{{ mysql_old_root_password }}"
              state=present

그런 다음 관련 인벤토리 파일을 업데이트하여이 새 변수를 추가하십시오.

따라서 group_vars/production이제 다음을 포함해야합니다.

mysql_old_root_password: productionpw
mysql_root_password: newproductionpw

이 작전은 모두의 루트 암호를 사용하는 것 같습니다 roles/mariadb/tasks/main.yml플레이 북 또한 roles/wordpress-setup/tasks/database.yml당신이 전체 실행할 수 있습니다, 그래서 server.yml확인이 제대로 설정되어 있는지 확인하기 위해 작전을.


큰 답변을 주셔서 감사합니다. 이것은 분명히 갈 길입니다. 콘솔에서 루트 비밀번호를 재설정했습니다. mysqladmin그러나 이것은 귀하의 답변을보기 전에였습니다
luqo33

7

~ / .my.cnf를 오용 할 수 있습니다mysql-root-password를 변경하여 를 .

트릭은 "Set root password"(nr.1) 작업을 수행하여 암호를 설정하는 것입니다. 그 후에 ~ / .my.cnf 를 만드는 작업이 있습니다. 다음 올바른 자격 증명 (nr.2) .

새로운 시스템에는 ~ / .my.cnf 가 없습니다. 작업 nr.1은 주어진 자격 증명으로 mysql-root-user를 생성합니다. 현재 시스템에서 ~ / .my.cnf의 신임 정보는 로그인하여 비밀번호를 mysql_root_password로 설정하는 데 사용됩니다 . 작업 nr.2는 ~ / .my.cnf 를 만들 거나 기존의 기존 자격 증명을 덮어 씁니다 ~ / .my.cnf 를 새 것으로 .

이 방법의 가장 큰 장점은 하나의 변수 "mysql_root_password"만 있다는 것인데, 이는 항상 플레이 북의 관점에서 올바른 변수입니다. 현재 시스템에서 ~ / .my.cnf 는 현재 로컬 mysql 자격 증명을위한 일종의 저장소입니다.

- name: Set root user password
  # If .my.cnf already exists, this will cause an mysql-root-password update.
  mysql_user:
    name: root
    password: "{{ mysql_root_password}}"
    check_implicit_admin: true

- name: Create .my.cnf
  template:
   src: "client.my.cnf.j2"
   dest: "/root/.my.cnf"
   owner: root
   group: root
   mode: 0600

client.my.cnf.j2 사용시 :

[client]
user=root
password={{ mysql_root_password }}

추가 자료

ansible-mysql_user_module-documentation의 관련 메모 :

  • 참고 1 :

    dem 등원 (Idempotent) 플레이 북의 일부로이 사용자를 보호하려면 최소한 두 개의 태스크를 작성해야합니다. 첫 번째 태스크는 login_user / login_password 세부 사항을 제공하지 않고 루트 사용자의 비밀번호를 변경해야합니다. 두 번째는 새 루트 자격 증명이 포함 된 ~ / .my.cnf 파일을 삭제해야합니다. 플레이 북의 후속 실행은 파일에서 새 자격 증명을 읽음으로써 성공합니다. ansible-mysql_user_module, 노트

  • 노트 2:

    신임 정보를 전달할 때 login_password 및 login_user가 모두 필요합니다. 존재하지 않는 경우, 모듈은 ~ / .my.cnf에서 신임 정보를 읽으려고 시도하고 마지막으로 비밀번호없이 MySQL 기본 로그인 'root'를 사용하여 폴백합니다. ansible-mysql_user_module, 노트


나는이 접근법을 아주 좋아하며 대답의 버전보다 훨씬 낫습니다. 아마도 대답이 맞을 것입니다.
ydaetskcoR

2
이 방법은 편리하지만 많은 시스템에서 실제로 호스트 127.0.0.1, localhost, :: 1 및 로컬 호스트 이름을 사용하여 4 개의 '루트'사용자가 작성됩니다. 위의 내용은 root @ localhost 만 수정하고 다른 3 개의 루트 계정은 빈 암호로 남겨 둡니다.
robo 2016 년

모든 루트 사용자를 나열하십시오 mysql --database mysql --execute "select host from user where user = 'root';".. 이 게시물 은이 답변과 동일하지만 모든 비밀번호를 설정하는 코드가 있습니다.
hlovdal

2

다음에 답을 찾는 다음 사람을 위해. 받아 들여진 대답은 사실이지만 MySQL 5.7을 사용하는 경우 데몬 모드 (서비스)의 mysqld에 익명 로그인이 허용되지 않기 때문에 부지런해야합니다. 대신 누군가 누군가 login_password = ydaetskcoR에서 비밀번호를 작성하여 사용하기로 결정한 임시 비밀번호를 /var/log/mysqld.log에 스크랩해야합니다. 이것은 개발자 저장소의 버전 5.7에서 구현하기로 결정한 기능이므로 이전 버전 (5.6)을 사용하지 않으려면.

여기에 설명서 : https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_initialize-insecure

http://mysqlserverteam.com/initialize-your-mysql-5-7-instances-with-ease/


1

MySQL 강화에 사용되는 Ansible 플레이 북이 있습니다.

https://github.com/dev-sec/ansible-mysql-hardening

이것은 루트 암호를 변경했을뿐만 아니라 서버를 강화하기위한 몇 가지 추가 단계를 수행합니다.

readme 파일을 살펴보십시오.


비어있을 때 루트 암호 변경을 처리하는 것처럼 보이지 않습니다.
flickerfly
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.