目录
- 一、playbook简介
- 二、基本示例
- 三、palybook示例
- 1.playbook基础
- 2.playbook执行命令
- 3.shell加密工具shc的安装
一、playbook简介
- Ansible实现管理的方式包括:
Ad-Hoc: 利用ansible命令直接完成管理,主要用于临时命令使用场景。
playbook: ansible脚本,主要用于大型项目场景,需要前期的规划,playbook是由一个或多个play组成的列表,使用YAML来编写。 - playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
- Playbook的功能:
playbook 是由一个或多个play组成的列表;
Playboot 文件使用YAML来写的;
特点:可读性好、和脚本语言交互性号、易于实现、适用程序执行流梳理方式、可扩展性强 - YAML语法简介:
在文件中用[---]开始
在文件中用[...]结尾
次行一般书写文件内容
缩进严格
大小写敏感
key/value可以多行书写也可一行书写,一行书写用,隔开
value可以是个字符串,也可是list
一个play需要包括name和tasks
name 是描述
tasks 是动作
一个name只能包含一个task
扩展名称yml或者yaml
- YAML列表
[Linux,C++,Java,Python]
-Linux
-C++
-Java
-Python
- YAML字典:存放键值
格式一:
name:test
hosts:westos1
tasks:
格式二:
{name: "test", hosts: "westos1", tasks: ""}
- playbook常用参数:
参数 | 含义 |
- -check/-C | 检测 |
- -syntax-check | check language |
- -list-hosts | 列出hosts |
- -list-tags | 列出tag |
- -list-tasks | 列出task |
- -limit | 指定执行主机 |
-v -vv | 现实过程 |
- Playbook的核心组件
name 可选,建议使用多用于说明
hosts 受控主机列表
tasks 任务,用与选择执行部分代码
- vim 设定技巧
autocmd FileType yaml setlocal ai ts=2 sw=2 et
设定 | 含义 |
setlocal | 设定当前文件 |
ai | 自动退格对齐 auto indent |
ts | tab建长度为2空格 tabstop=2 |
sw | 缩进长度为2 shiftwidth=2 |
et | 把tab键变成空格 expandtab |
二、基本示例
接上节的debug模块:
Ansible 的 registers用来捕捉一个task的输出作为一个变量。在Ansible的其它地方我们可以使用该变量,这种变量包含了这个任务的返回值
var:将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
---
- hosts: test %单独主机/ 组 /多个组 /all都可
tasks:
- name: install apache %任务1
yum:
name: httpd
state: present
- name: start apache %任务2
service:
name: httpd
state: started
可以看到标准输出为hello
verbosity: debug的级别(默认是0级,全部显示),,可以看到只显示了一部分
将debug的级别设定为0级,全部显示
msg:调试输出的消息
将该任务执行的输出作为变量(test)传递给debug模块,debug会直接将其打印输出
想要输出指定的内容不能用下面格式
应使用debug模块的msg参数
或者如下格式,一个name只能包含一个task
设定一个tab=2个空格
输出信息
shell指令需要使用-v参数查看过程信息
也可以使用以下写法
在受控主机的/mnt目录下建立文件
成功建立
三、palybook示例
1.playbook基础
主机与用户:
---
- hosts: server2 //指定主机组,可以是一个或多个组,逗号分隔。
remote_user: root //指定远程主机执行的用户名
---
- hosts: webservers
remote_user: root
become: yes //切换用户运行
become_user: mysql //指定sudo用户为mysql
Tasks 列表
Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。
每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
tasks:
- name: install apache //定义任务名
所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。
使用ansible主机远程执行命令,在受控主机部署vsftpd,并且设置匿名用户可以登陆,重启动,加入到防火墙
安装vsftp:
---
- name: ftp install
hosts: westos
tasks:
- name: dnf install 加-是因为区别每个动作
dnf: 安装部分
name: vsftpd
state: present
- name: lineinfile
lineinfile: 修改文件部分
path: /etc/vsftpd/vsftpd.conf
regexp: "anonymous_enable=NO"
line: "anonymous_enable=YES"
- name: restart
service: 服务修改部分
name: vsftpd
state: restarted
enabled: yes
- name: firewalld
firewalld: 防火墙部分
zone: public
service: ftp
permanent: yes
state: enabled
immediate: yes
...
执行playbook
测试,ftp成功安装
2.playbook执行命令
–check|-C :检测
–syntax-check :check language
–list-hosts :列出hosts
–list-tasks :列出task
执行playbook
详细过程
–limit :指定执行主机
3.shell加密工具shc的安装
shell脚本是可读写的, 很有可能会泄露敏感信息, 如用户名/密码/路径/IP等. 同样在shell脚本运行时会也泄露敏感信息。shc是一个加密shell脚本的工具, 它的作用是把shell脚本转换为一个可执行的二进制文件. 这就很好的解决了上述问题。
真机网上下载shc包,并传给westosb
node节点写一个脚本文件
node节点解压shc包,可以看到shc.c是一个指向shc-3.8.7.c(文本文件)的符号链接
安装gcc
1、gcc编译,选项-o用于指定要生成的结果文件,后面跟的就是结果文件名字。
o是output的意思,不是目标的意思。结果文件可能是预处理文件、汇编文件、目标文件或者最终可执行文件。
2、执行可执行文件shc
将可执行文件移到/bin目录(用于存放二进制文件)
-f 指定要解密的文件,-r 指定一种安全的加密方式(使用 RC4 加密算法,它能够把 shell 程序转换成二进制可执行文件 );
生成两个文件test.sh.x和test.sh.x.c,前者是动态链接的二进制可执行文件,后者相应的是C程序(脚本的源文件,可删除)。
可以看到二进制可执行文件被加密了,cat无法看到
执行可以显示解密后的输出