unix - Ansible更新sshd配置文件

标签 unix ssh ansible

我正在编写一个 Ansible play 以在 100 多个 Unix 服务器中自动创建新用户。我在创建用户和分配密码的地方找到了正确的部分。但是我们的组织强化策略要求,无论何时添加新用户,都必须在 sshd_config 文件的“AllowUsers”参数中更新用户名。我是 Ansible 的新手,不知道如何完成这项工作。

这是 sshd_config 文件的“AllowUsers”部分。

AllowUsers root user1 user2 user2

这是添加新用户“testuser”后的样子

AllowUsers root user1 user2 testuser

最佳答案

如果用户已经在列表中,我会搜索不执行任何操作的解决方案。这就是它在 Ansible 中的工作方式。我的解决方案首先搜索用户,只有当用户不在列表中时才会添加。

tasks:
- name: Check if bamboo user already is in SSHD AllowUsers list
  command: grep -P '^[ \t]*AllowUsers[ \t]+([-\w ]+[ \t]+)*bamboo([ \t]+.+)*$' /etc/ssh/sshd_config
  register: allow_users_exists
  changed_when: no
  ignore_errors: yes

- name: Allow bamboo user SSH login
  lineinfile:
    regexp: ^[ \t]*AllowUsers([ \t]+.*)$
    line: AllowUsers bamboo\1
    dest: /etc/ssh/sshd_config
    backrefs: yes
    validate: sshd -t -f %s
  when: allow_users_exists.rc != 0
  notify:
    - reload sshd

handlers:
- name: reload sshd
  service:
    name: sshd
    state: reloaded

在这种特殊情况下,我正在搜索静态用户“bamboo”。您可以像这样使用变量:

command: grep -P '^[ \t]*AllowUsers[ \t]+([-\w ]+[ \t]+)*{{ username | regex_escape() }}([ \t]+.+)*$' /etc/ssh/sshd_config

line: AllowUsers {{ username }}\1

结果

在:

AllowUsers ubuntu #sdfd

输出:

AllowUsers bamboo ubuntu #sdfd

在:

AllowUsers ubuntu

输出:

AllowUsers bamboo ubuntu

在:

AllowUsers ubuntu bamboo

输出:

AllowUsers ubuntu bamboo

关于unix - Ansible更新sshd配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50638944/

相关文章:

c - getenv 的标准 C 用法和安全实践

c - 找出套接字的传输类型

ubuntu - 如何等待多个远程进程(通过 ssh)完成?

ssh - 如何从 ansible playbook 构建自定义 ssh 连接

linux - 语法错误 : end of file unexpected (expecting "done")

php - Multi-Tenancy PHP 应用程序的 Cron 作业/计划任务

linux - HDFS +在Linux远程计算机上运行hdfs命令

linux - 为什么在没有可视终端的情况下通过 SSH 执行命令会使用不同的 PATH 位置?

ansible - 使用列表项解析字典

node.js - 在 ec2 实例上使用 ansible 从 shell 脚本运行永久 Node 任务