-
综合架构知识概述说明
- 企业防范入侵方法
- 了解批量管理服务
- 部署批量管理服务
- 批量管理服务配置 /etc/ansible/hosts
- 批量管理模块应用
- 批量管理剧本功能 自动化
- 批量管理角色功能
-
综合架构课程回顾:
- 远程管理服务介绍 ssh(22) telnet(23)
- 远程管理连接原理 私钥 公钥
- 远程连接方式介绍 基于密码 基于密钥
- 基于密钥远程连接 创建密钥(ssh-keygen) 分发密钥(ssh-copy-id)
- 批量分发密钥方法 编写脚本
远程服务防范入侵案例
1、用密钥登录,不用密码登陆。
2、牤牛阵法:解决SSH安全问题
a.防火墙封闭SSH,指定源IP限制(局域网、信任公网)
b.开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)。
3、尽量不给服务器外网IP
4、最小化(软件安装-授权)
5、给系统的重要文件或命令做一个指纹
6、给他锁上 chattr +i +a-
远程连接配置信息
vim /etc/ssh/sshd_config
Port 52113 --- 修改服务端口信息
ListenAddress 0.0.0.0 --- 指定监听地址信息(监听地址指定配置本地主机网卡上有的地址)
PermitRootLogin yes --- 是否允许root进行登录
PasswordAuthentication yes --- 是否支持密码连接PermitEmptyPasswords no --- 是否使用空密码连接主机
GSSAPIAuthentication no --- 加快SSH连接效率
UseDNS no -
批量管理服务概念介绍 (saltstack puppet)
ansible批量管理服务概述- 是基于python语言开发的自动化软件工具
- 是基于SSH远程管理服务实现远程主机批量管理
ansible批量管理服务意义 - 提高工作的效率
- 提高工作准确度
- 减少维护的成本
- 减少重复性工作
ansible批量管理服务功能 - 可以实现批量系统操作配置
- 可以实现批量软件服务部署
- 可以实现批量文件数据分发
- 可以实现批量系统信息收集
ansible批量管理服务特点 - 管理端不需要启动服务程序(no server)
- 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
- 受控端不需要安装软件程序(libselinux-python)
- 受控端不需要启动服务程序(no agent)
- 服务程序管理操作模块众多(module)
- 利用剧本编写来实现自动化(playbook)
学习ansible:
- 主机清单配置: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
- 模块功能应用:
- 剧本编写功能:
-
ansible软件安装部署
第一个历程: 安装部署软件
m01: yum install -y ansible第二个历程: 进行测试连接
编写主机清单文件tail -3 /etc/ansible/hosts
172.16.1.7
172.16.1.31
172.16.1.41ansible all -m ping
172.16.1.31 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
} -
ansible软件主机清单配置
配置方式一: 直接编写主机IP地址
172.16.1.7
172.16.1.31
172.16.1.41配置方式二: 进行分组配置
[rsync-server]
172.16.1.41[rsync-client]
172.16.1.31
172.16.1.7配置方式三: 进行变量配置(剧本)
变量设置方法一: 指定主机调用变量信息
172.16.1.41 ansible_user=root ansible_password=654321 ansible_port=22
变量设置方法二: 将组中所有主机统一设置变量信息
[rsync-server]
172.16.1.41
[rsync-server:vars]
ansible_user=root
ansible_password=654321
ansible_port=22配置方式四: 将多个组进行整合
[rsync:children]
rsync-server
rsync-client[rsync-server]
172.16.1.41[rsync-client]
172.16.1.31
172.16.1.7配置方式五: 将多个连续的主机进行符号匹配
[oldboy]
172.16.1.[1:4]调整远程连接用户权限配置
ansible_become --- 是否激活su 或者 sudo功能
ansible_become_method --- 具体使用什么方法提升普通用户权限 su/sudo
ansible_become_user --- 变成什么指定用户进行操作 root
ansible_become_password --- 指定用户密码信息[rsync-server]
172.16.1.41 ansible_become=yes ansible_become_method=su ansible_become_user=root ansible_become_password=654321
172.16.1.31
172.16.1.7
[rsync-server:vars]
ansible_user=oldboy
ansible_password=123456
ansible_port=22
ansible_become=yes
ansible_become_method=sudo
ansible_become_user=root
ansible_become_password=123456ansible配置文件信息
[privilege_escalation]
become=True --- 开启用户提权功能
become_method=su --- 使用的提权方法
become_user=root --- 指定提权用户root
become_ask_pass=True --- 是否开启密码功能
become_password=654321 --- ???
-
ansible模块应用说明
- 命令类型模块 (command shell script)
command --- 远程批量执行命令模块 (默认模块)
基本功能:
ansible all -m command -a "ip a s eth0"
模块参数:
chdir --- 在执行命令前切换目录
ansible all -m command -a "chdir=/tmp touch oldboy.txt"
creates --- 指定目录如果存在, 跳过后续操作过程
removes --- 指定目录如果不存在, 跳过后续操作过程shell --- 远程批量执行命令模块 (万能模块)
ansible all -m shell -a "touch oldboy.txt"
第一个历程: 编写脚本
第二个历程: 将脚本传输被管理主机上
第三个历程: 进行脚本文件授权操作
第四个历程: 运行ansible命令
ansible 172.16.1.41 -m shell -a "/server/scripts/yum.sh"script --- 远程执行脚本文件
第一个历程: 编写脚本
第二个历程: 运行ansible命令
ansible 172.16.1.41 -m script -a "/server/scripts/yum.sh"- 文件类型模块 copy file fetch
copy --- 批量分发文件信息/ 批量备份文件信息
批量分发文件:
ansible all -m copy -a "src=/oldboy/oldbaby.txt dest=/tmp mode=666 owner=oldboy group=oldboy"
批量备份源文件:
ansible all -m copy -a "src=/oldboy/oldbaby.txt dest=/tmp mode=666 owner=oldboy group=oldboy backup=yes"批量还原文件信息:
ansible all -m copy -a "src=/tmp/oldbaby.txt.bak dest=/tmp/oldbaby.txt mode=666 owner=oldboy group=oldboy remote_src=yes"批量创建文件, 文件中生成指定信息
ansible all -m copy -a "content=rsync_backup:oldboy123 dest=/etc/rsync.password mode=600"批量分发文件会自动创建目录信息
ansible all -m copy -a "src=/oldboy/oldbaby.txt dest=/oldbaby/oldboy01/oldboy02/oldboy03/ mode=600"file --- 修改文件属性信息
修改文件权限属性信息
ansible all -m file -a "path=/tmp/oldbaby.txt mode=644 owner=root group=root"批量创建目录信息
ansible all -m file -a "path=/oldboy50/ state=directory"批量创建文件信息
ansible all -m file -a "path=/oldboy50/ state=touch"批量创建硬链接文件
ansible all -m file -a "src=/oldboy50/oldboy.txt path=/oldboy50/oldboy_hard.txt state=hard"批量创建软链接文件
ansible all -m file -a "src=/oldboy50/oldboy.txt path=/oldboy50/oldboy_soft.txt state=link"批量删除文件信息
ansible all -m file -a "path=/oldboy50/ state=absent"fetch --- 批量拉取数据模块
批量拉取文件数据信息
ansible all -m fetch -a "src=/tmp/ dest=/oldgirl"- 系统功能模块
yum --- 批量安装软件
ansible all -m yum -a "name=iftop state=installed"
service --- 批量管理服务信息
ansible all -m service -a "name=crond state=started enabled=yes"cron --- 批量设置定时任务
* * * * 执行任务信息
minute hour day month weekday job='ntpdate ntp1.aliyun.com &>/dev/null'
批量设置定时任务:
ansible all -m cron -a "name='date sync01' minute=0 hour=2 job='ntpdate ntp1.aliyun.com &>/dev/null'"批量删除定时任务:
ansible all -m cron -a "name='date sync01' state=absent"批量注释定时任务:
ansible all -m cron -a "name='date sync01' minute=0 hour=2 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes" - 命令类型模块 (command shell script)
补充: ansible帮助信息查看方法
ansible-doc -l --- 列出模块信息
ansible-doc -s 模块名 --- 列出模块参数信息
ansible-doc 模块名 --- 列出模块详细信息
绿色: 查询操作|操作没有执行
黄色: 操作被执行了
紫色: 警告建议信息
红色: 报错
蓝色: 显示执行过程
4) 用户模块 user group
user --- 批量创建用户
批量创建用户信息
ansible all -m user -a "name=alex"
ansible all -m user -a "name=alex01 uid=4000"
ansible all -m user -a "name=alex02 uid=4001 group=alex"
ansible all -m user -a "name=alex03 shell=/sbin/nologin create_home=no"
批量删除用户信息
ansible all -m user -a "name=alex state=absent"
ansible 172.16.1.41 -m user -a "name=alex01 state=absent remove=yes"
批量创建用户设置密码
ansible 172.16.1.41 -m user -a 'name=alex01 password=$6$01$snUJALRNL0on5KrtUPpluyfigSNzXxOxDgcdY5djxcmw45C/tKvB./53OhOXLbTqg/D8XadSbcpYqgJTzJ2bH0'
如何创建密文密码:
方法一:
[root@oldboy-m01 ~]# ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', '01') }}"
localhost | SUCCESS => {
"msg": "$6$01$snUJALRNL0on5KrtUPpluyfigSNzXxOxDgcdY5djxcmw45C/tKvB./53OhOXLbTqg/D8XadSbcpYqgJTzJ2bH0"
}
方法二:
yum install -y python-pip
pip install passlib
优化pip源方法
pypi
配置方法
在文件
~/.pip/pip.conf
中添加或修改:
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
[root@oldboy-m01 ~]# python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$YEBaHethHNl2oEUU$ejYMZcDtlHhgWBMuKevFSf7CpGvqVbBD2qMwB4lrdJ3IW2awZafxnDJtvCuEEnbT1ftNbQ46IHS8IcVw1kmO30
5) 系统挂载模块 mount
批量挂载操作:
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data/blog path=/mnt fstype=nfs state=mounted"
批量卸载操作:
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data/blog path=/mnt fstype=nfs state=absent"
present 在fstab文件中设置自动挂载操作 永久挂载操作
mounted 在fstab文件中设置自动挂载操作 永久挂载操作 ******
在命令行界面进行挂载操作 临时挂载操作
absent 将fstab文件中设置信息删除 永久卸载操作 ******
在命令行界面进行卸载操作(尝试删除挂载点目录) 临时卸载操作
unmounted 在命令行界面进行卸载操作 临时卸载操作
-
ansible剧本编写功能:
可以将多个模块功能进行整合, 一键化部署服务PYyaml -- 语法规范???
- 缩进规范 需要输入两个空格
hosts: 主机信息
tasks:
name: - 字典规范 冒号输入规范: 冒号后面需要加一个空格
hosts: 172.16.1.31
tasks:
name: xxx - 列表规范 短横线规范: 短横线后面需要加空格
- hosts: 172.16.1.31
tasks:- copy: xxx
- yum: xxx
- hosts: 172.16.1.41
tasks:
shell:
一键化部署rsync服务剧本:
第一步: 定义主机清单:
[rsync_server]
172.16.1.41
[rsync_server:vars]
ansible_user=root
ansible_password=654321
ansible_port=22[rsync_client]
172.16.1.31
172.16.1.7
[rsync_client:vars]
ansible_user=root
ansible_password=654321
ansible_port=22第二个步骤: rsync软件部署过程
rsync服务端部署过程:安装rsync软件
ansible rsync_server -m yum -a "name=rsync state=installed"编写rsync配置文件
在管理先编写一个rsyncd.conf文件, 将文件进行分发
ansible rsync_server -m copy -a "src=/etc/ansible/conf/rsyncd.conf dest=/etc/ backup=yes"创建rsync虚拟用户
ansible rsync_server -m user -a "name=rsync shell=/sbin/nologin create_home=no"创建备份目录,并进行授权
ansible rsync_server -m file -a "path=/backup state=directory owner=rsync group=rsync"创建密码文件,并授权
ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"启动rsync服务
ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"
- 缩进规范 需要输入两个空格
rsync客户端部署过程:
1) 安装rsync
ansible rsync_client -m yum -a "name=rsync state=installed"
2) 创建密码文件, 并授权
ansible rsync_clientr -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
vim /etc/ansible/playbook/rsync_auto.yaml
- hosts: rsync_server
tasks:
- name: 01:install rsync
yum: name=rsync state=installed
- name: 02:push rsync conf file
copy: src=/etc/ansible/conf/rsyncd.conf dest=/etc/ backup=yes
- name: 03:create user rsync
user: name=rsync shell=/sbin/nologin create_home=no
- name: 04:create backup dir
file: path=/backup state=directory owner=rsync group=rsync
- name: 05:create password file
copy: content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600
- name: 06:boot rsync server
service: name=rsyncd state=started enabled=yes
- hosts: rsync_client
tasks:
- name: 01:install rsync
yum: name=rsync state=installed
- name: 02:create password file
copy: content='oldboy123' dest=/etc/rsync.password mode=600
第三个历程: 剧本执行过程:
语法检查:
ansible-playbook --syntax-check 剧本信息
模拟执行:
ansible-playbook -C 剧本信息
真正执行:
ansible-playbook 剧本信息
- 课程知识总结梳理:
- 远程知识补充说明
a 防范入侵方法
b 远程配置文件 监听参数 - ansible批量管理服务概述
- ansible软件安装部署过程 epel
- ansible软件配置使用方法
主机清单配置:
模块使用方法:
剧本编写说明:
- 远程知识补充说明