Day1-下午: ansible.cfg, ad-hoc

  • 2020-03-19
  • 189
  • 0

ansible配置文件


一.Ansible配置文件的读取顺序

  1. 是以ini格式存储数据的,在Ansible中,几乎所有配置都可以通过Ansible的Playbook或环境变量来重新赋值。
  2. 在运行Ansible命令时,命令将会按照预先设定的顺序查找配置文件:
    • ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件
    • ./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件
    • ~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件
    • /etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件

二.配置文件段落概述

三.default段落配置项

  • default段落参数非常多,需要时再补充

四.privilege_escalation段落

  • 老师建议这里的配置项全部打开,但是这里的配置项似乎和sudo有关,如果是不需要sudo或者没有配置sudo的系统,这里应该不要打开
  • 当remote_user配置了非root的时候,开启这里的配置可以实现自动提权,而不需要加-b参数

五.ssh_connection段落

  • 加上-o StrictHostKeyChecking=no是为了解决配置了公私钥登陆后,第一次连接,需要一个提示你输入一个yes/no的问题,加上了这个参数后,这个交互提示就没了,并且自动会在~/.ssh/known_hosts中添加必要的host的指纹

ansible的Ad-hoc


一.什么是Ad-hoc

  • Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbook。Ad-hoc的执行依赖于模块,ansible官方提供了大量的模块。 如:command、raw、shell、file、cron等,具体可以通过ansible-doc -l 进行查看 。可以使用ansible-doc -s module来查看某个模块的参数,也可以使用ansible-doc help module来查看该模块更详细的信息。

二.Ad-hoc命令语法

ansible 主机或组 -m 模块名 -a \'[模块参数][ 命令]\' ansible参数

  • 主机和组,是在/etc/ansible/hosts 里进行指定的部分,当然动态Inventory 使用的是脚本从外部应用里获取的主机;
  • 模块名,可以通过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改;
  • [模块参数][ 命令],可以通过 “ansible-doc -s 模块名” 查看具体的用法及后面的参数;[但是这里有个地方, ad-hoc默认不加任何人数的话,这里直接输入命令即可,输入的命令实际上不属于任何模块参数,不同的模块参数和命令以及命令参数之间使用空格分隔]

    • 如果不用-a指定模块的话,默认模块是command
    • -a这里的语法注意:-a使用双引号的话,里边所有的变量需要引号的时候 都要使用单引号;-a使用单引号的话,里边所有的变量需要引号的时候 都要使用双引号
  • ansible参数,可以通过ansible命令的帮助信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。

三.ad-hoc执行的时候,推荐使用普通用户,如果权限无法获得,ansible会自动提权,但是这是就需要配置提权

  • 配置提权在ansible.conf里的privilege_escalation段落
  • 默认远程执行命令的用户是remote_user参数配置

四.ad-hoc常用的命令模块

1. ansible的命令执行包含4个模块

  • command模块:ansible命令的默认模块,该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有如下字符部分则执行不成功 <, >, |, &;
  • shell模块:用法基本和command一样,不过其是通过/bin/sh进行执行,所以shell 模块可以执行任何命令,就像在本机执行一样;
  • raw模块:用法和shell模块一样,也可以执行任意命令,就像在本机执行一样;和command、shell模块不同的是其没有chdir、creates、removes参数
  • script模块:将管理端的shell在被管理主机上执行,其原理是先将shell复制到远程主机,再在远程主机上执行,原理类似于raw模块。

2. shell模块包含的选项

  • creates:一个文件名,当该文件存在,则该命令不执行
  • free_form:要执行的linux指令
  • chdir:在执行指令之前,先切换到该指定的目录
  • removes:一个文件名,当该文件不存在,则该选项不执行

3. 实验一:chdir参数的使用

  • 执行以下ad-hoc命令

  • 输出结果似乎都执行成功

  • 实际只生成两个文件

  • 原因在于,raw模块并没有过chdir参数

4. 实验二:creates与removes参数的使用

  • 执行一下ad-hoc命令

  • 输出结果:

  • 当/tmp/test.file文件存在时,creates /tmp/test.file命令实际不可执行(因为文件存在了,不用creates了),代表False,则不执行后面的命令,这里也就是不执行uptime指令
  • 当/tmp/test.file文件存在时,removes /tmp/test.file命令实际可执行,代表True,则继续执行后面的命令,这里也就是执行uptime指令
  • 总是来说就是,前边为True,才执行后边,True的前提是:
    • 原本存在,可删除← removes
    • 原本不存在,可创建← creates

5. script模块

评论

还没有任何评论,你来说两句吧

津公网安备 12010302001147号 津ICP备18003766号