首页 > 解决方案 > 通过 ansible playbook 启用 mongo 身份验证

问题描述

我尝试在我的服务器上安装 mongodb 并启用身份验证。但我坚持为身份验证添加用户。当我尝试执行剧本时,它在添加用户任务和输出时失败:

任务执行期间发生异常。要查看完整的回溯,请使用 -vvv。错误是:pymongo.errors.OperationFailure:没有经过身份验证的用户致命:[***]:失败!=> {"changed": false, "msg": "无法连接到数据库:没有经过身份验证的用户"}

我该如何解决?

剧本.yml

- name: Install mongodb
  apt:
    name: mongodb-org
    update_cache: yes
    state: present

- name: Set config
  template:
    src: templates/mongodb.yml
    dest: /etc/mongod.conf
  notify: restart mongodb

- name: Install pymongo
  pip:
    name: pymongo
    state: present

- name: Add user
  mongodb_user:
    database: "{{ mongodb_name }}"
    name: "{{ mongodb_user }}"
    password: "{{ mongodb_password }}"
    login_host: "{{ mongodb_bind_ip }}"
    login_port: "{{ mongodb_port }}"
    state: present

mongodb.yml

net:
  port: {{ mongodb_port }}
  bindIp: {{ mongodb_bind_ip }}
  unixDomainSocket:
   enabled: false
security:
  authorization: enabled

标签: mongodbansible

解决方案


如果数据库中没有管理员用户,则需要使用 disabled 启动它security.authorization,添加管理员用户,然后使用 enabled 重新启动 mongodb security.authorizationhttps ://docs.mongodb.com/manual/tutorial/enable-authentication/#procedure

之后,您可以使用管理员的凭据添加更多用户:

- name: Add user
  mongodb_user:
    database: "{{ mongodb_name }}"
    name: "{{ mongodb_user }}"
    password: "{{ mongodb_password }}"
    login_host: "{{ mongodb_bind_ip }}"
    login_port: "{{ mongodb_port }}"
    login_user: "{{ admin_login }}"
    login_password: "{{ admin_password }}"
    state: present

https://docs.ansible.com/ansible/2.4/mongodb_user_module.html


推荐阅读