通过 ec2 中的 ansible 以 systemd 作为默认用户运行服务(请求密码)

通过 ec2 中的 ansible 以 systemd 作为默认用户运行服务(请求密码)

我正在尝试使用以下 Ansible 脚本(剧本的一部分)systemd在 EC2(微型)实例上的 rails 应用程序上运行 unicorn:

---

- name: restart unicorn
  command: psql -h {{ db_host }} -U {{ db_user }} -d {{ db }} -c "SELECT true FROM pg_tables WHERE tablename = 'order_cycles';"
  register: table_exists
  ignore_errors: yes
  sudo: yes
  sudo_user: "{{ unicorn_user }}"
  notify: restart unicorn step 2

#TODO make sure both of these things run as one handler.
- name: restart unicorn step 2
  service:
    name: unicorn_{{ app }}
    state: restarted
  when: table_exists.stderr.find('does not exist') == -1
  # If unicorn isn't actually started yet we probably need this:
  notify: start unicorn

- name: start unicorn
  service:
    name: unicorn_{{ app }}
    state: started

剧本中配置的用户是ubuntu默认(EC2)用户,我在那里遇到Interactive authentication required错误,所以我只是尝试直接在部署到服务器的命令行中排除故障,并遇到了这个障碍。

我可以用 sudo 来运行它:

$ sudo systemctl start unicorn_myapp.service

直接通过服务器的命令行,或者使用Ansible 的原始版本方法,成功了。

但是用户运行的 rails 服务器ubuntu无法访问它(至少这是我正在探索的导致.sock failed (111: Connection refused错误的途径)。

如果我不使用 sudo 运行它,则会要求输入密码,但据我所知,EC2 ubuntu 用户无需密码即可运行。

我知道一个解决方法可能是创建新用户并设置密码并以该用户身份运行 rails 和 systemctl/unicorn,但我不认为这是该问题的真正答案,更重要的是,由于剧本的开发人员最近出于user_password安全原因将其从剧本中完全删除。

如果我能弄清楚如何systemd以非 root 用户身份运行,也许我就能弄清楚如何让 Ansible 成功运行。

当然,我一开始就从错误的角度来处理这个问题,这也并非不可能,因为我对这个场景所涉及的几乎所有事情都相当陌生。

答案1

如果您有全局 sudo,请添加become: no到不需要 sudo 权限的两个任务。

相关内容