1.firewalld
firewalld默认提供的九个zone配置文件都保存在“/usr/lib/firewalld/zones/”目录下,分别为:block.xml drop.xml home.xml public.xml work.xml dmz.xml external.xml internal.xml trusted.xml
在RHEL7中,firewalld服务是默认的防火墙配置管理工具,他拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。firewall-config和firewall-cmd是直接编辑xml文件,其中firewall-config是图形化工具,firewall-cmd是命令行工具。
firewall-cmd: 设置访问web服务器的80端口时转发到9091端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.233.0/24" forward-port port="80" protocol="tcp" to-port="9090" to-addr="192.168.233.100"'
#to-addr 加上是因为主机中设置了多个IP,不加主机不知道是呢个ip
2.ansible
Ansible是近年越来越火的基于python开发的一款运维自动化工具,主要帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提高运维工作效率。Ansible是基于模块来运行,它本身没有任何批量部署的能力,Ansible主要是提供一种批量部署的框架。 常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。
环境:三个主机,需要配IP为静态,一个主机为管理主机,两个为受管主机
1.使用shell或者command模块创建用户:testuser1
manage主机
[root@manage ansible]# ansible node1 -m shell -a 'useradd testuser1'
node1主机查看
[root@node1 ~]#
testuser1:x:1009:1009::/home/testuser1:/bin/bash
2.使用script/shell/command模块执行脚本:脚本内容为:echo "Hello World"
在受控主机上/root底下创建test.sh脚本文件
[root@node1 ~]# vim test.sh
[root@node1 ~]# cat test.sh
#!/bin/bash
echo "hello world"
在manange主机上测试脚本
[root@manage ansible]# ansible node1 -m command -a ' sh test.sh chdir=/root'
node1 | CHANGED | rc=0 >>
hello world
3.使用copy模块:将管理主机(manage)上 /root/ansible/copyfile 文件拷贝到 被管理主机node1上的/home/testuser1目录下
- copy模块
见名知义,copy模块的作用就是拷贝文件,它与fetch模块类似,不过,fetch模块是从远程主机中拉取文件到ansible主机,而copy模块是将ansible主机上的文件拷贝到远程主机中。 - src参数 :用于指定需要copy的文件或目录
- dest参数 :用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数
- content参数 :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
- force参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
- backup参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
- owner参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
- group参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
- mode参数 : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r--r--",则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
manage主机上写入
[root@manage ansible]# ll
total 8
-rw-r--r-- 1 root root 689 Oct 29 22:17 ansible.cfg
-rw-r--r-- 1 root root 137 Oct 29 03:16 inventory
[root@manage ansible]# vim copyfile
[root@manage ansible]# ll
total 12
-rw-r--r-- 1 root root 689 Oct 29 22:17 ansible.cfg
-rw-r--r-- 1 root root 30 Nov 1 03:51 copyfile
-rw-r--r-- 1 root root 137 Oct 29 03:16 inventory
[root@manage ansible]# ansible node1 -m copy -a 'src=/root/ansible/copyfile dest=/home/testuser1/ '
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "66c8ca80d5e60a86403a8cf5834c874a8aadd109",
"dest": "/home/testuser1/copyfile",
"gid": 0,
"group": "root",
"md5sum": "c1927187cfa9b0baea68bacea2d5fc60",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 30,
"src": "/home/ansible/.ansible/tmp/ansible-tmp-1667289442.6064396-135829861809980/source",
"state": "file",
"uid": 0
}
4.使用blockinfile模块:
- 向/home/testuser1/copyfile文件中插入:Hello World 在Hello World之后插入: Hello Shaanxi 在Hello World之前插入:Hello China 删除 Hello World替换 Hello Shaanxi 为 Hello Xian
blockinfile模块可以帮助我们在指定的文件中插入"一段文本",这段文本是被标记过的,换句话说就是,我们在这段文本上做了记号,以便在以后的操作中可以通过"标记"找到这段文本,然后修改或者删除它.
- path参数 :必须参数,指定要操作的文件。
- block参数 :此参数用于指定我们想要操作的那"一段文本",此参数有一个别名叫"content",使用content或block的作用是相同的。
- marker参数 :假如我们想要在指定文件中插入一段文本,ansible会自动为这段文本添加两个标记,一个开始标记,一个结束标记,默认情况下,开始标记为# BEGIN ANSIBLE MANAGED BLOCK,结束标记为# END ANSIBLE MANAGED BLOCK,我们可以使用marker参数自定义"标记",比如,marker=#{mark}test ,这样设置以后,开始标记变成了# BEGIN test,结束标记变成了# END test,没错,{mark}会自动被替换成开始标记和结束标记中的BEGIN和END,我们也可以插入很多段文本,为不同的段落添加不同的标记,下次通过对应的标记即可找到对应的段落。
- state参数 : state参数有两个可选值,present与absent,默认情况下,我们会将指定的一段文本"插入"到文件中,如果对应的文件中已经存在对应标记的文本,默认会更新对应段落,在执行插入操作或更新操作时,state的值为present,默认值就是present,如果对应的文件中已经存在对应标记的文本并且将state的值设置为absent,则表示从文件中删除对应标记的段落。
- insertafter参数 :在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的后面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为EOF,表示将文本插入到文档末尾。
- insertbefore参数 :在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的前面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为BOF,表示将文本插入到文档开头。
- backup参数 :是否在修改文件之前对文件进行备份。
- create参数 :当要操作的文件并不存在时,是否创建对应的文件。
[root@manage ansible]# ansible node1 -m blockinfile -a 'path=/home/testuser1/copyfile block="hello world" '
向/home/testuser1/copyfile文件中插入:Hello World
[root@manage ansible]# ansible node1 -m blockinfile -a 'path=/home/testuser1/copyfile block="hello shaanxi" marker="#{mark} test reg " insertafter="hello world" '
在Hello World之后插入: Hello Shaanxi
[root@manage ansible]# ansible node1 -m blockinfile -a 'path=/home/testuser1/copyfile block="hello china" marker="#{mark} test reg2 " insertbefore="hello world" '
在Hello World之前插入:Hello China
[root@manage ansible]# ansible node1 -m blockinfile -a 'path=/home/testuser1/copyfile block="hello china" marker="#{mark} test reg2 " state=absent '
删除 Hello World
[root@manage ansible]# undo ansible node1 -m lineinfile -a 'path=/home/testuser1/copyfile regexp="world" line="xian" '
替换